1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-12-12 14:01:08 +01:00

Merge branch '4.1'

Conflicts:
	smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java
	smack-core/src/main/java/org/jivesoftware/smack/PacketCollector.java
	smack-core/src/main/java/org/jivesoftware/smack/PacketListener.java
	smack-core/src/main/java/org/jivesoftware/smack/XMPPConnection.java
	smack-core/src/main/java/org/jivesoftware/smack/debugger/SmackDebugger.java
	smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java
	smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java
	smack-core/src/test/java/org/jivesoftware/smack/ThreadedDummyConnection.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/address/provider/MultipleAddressesProvider.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/ibb/DataListener.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/filetransfer/FaultTolerantNegotiator.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/filetransfer/IBBTransferNegotiator.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/filetransfer/Socks5TransferNegotiator.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/filetransfer/StreamNegotiator.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/LeafNode.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Node.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PubSubManager.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/packet/PubSub.java
	smack-extensions/src/main/java/org/jivesoftware/smackx/vcardtemp/VCardManager.java
	smack-extensions/src/test/java/org/jivesoftware/smackx/receipts/DeliveryReceiptTest.java
	smack-im/src/main/java/org/jivesoftware/smack/chat/ChatManager.java
	smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSession.java
	smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/provider/JingleProvider.java
	smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/UserID.java
	smack-legacy/src/main/java/org/jivesoftware/smackx/xroster/provider/RosterExchangeProvider.java
	smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java
	version.gradle
This commit is contained in:
Florian Schmaus 2015-03-04 22:42:36 +01:00
commit 701aa7d9c4
298 changed files with 2402 additions and 1562 deletions

View file

@ -27,6 +27,7 @@ import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.id.StanzaIdUtil;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.vcardtemp.packet.VCard;
import org.jxmpp.jid.BareJid;
@ -95,7 +96,12 @@ public class VCardManager extends Manager {
* @throws InterruptedException
*/
public void saveVCard(VCard vcard) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
// XEP-54 § 3.2 "A user may publish or update his or her vCard by sending an IQ of type "set" with no 'to' address…"
vcard.setTo((Jid) null);
vcard.setType(IQ.Type.set);
// Also make sure to generate a new stanza id (the given vcard could be a vcard result), in which case we don't
// want to use the same stanza id again (although it wouldn't break if we did)
vcard.setStanzaId(StanzaIdUtil.newStanzaId());
connection().createPacketCollectorAndSend(vcard).nextResultOrThrow();
}

View file

@ -569,23 +569,27 @@ public class VCard extends IQ {
xml.rightAngleBracket();
if (hasNameField()) {
xml.openElement("N");
xml.element("FAMILY", lastName);
xml.element("GIVEN", firstName);
xml.element("MIDDLE", middleName);
xml.optElement("FAMILY", lastName);
xml.optElement("GIVEN", firstName);
xml.optElement("MIDDLE", middleName);
xml.closeElement("N");
}
if (hasOrganizationFields()) {
xml.openElement("ORG");
xml.element("ORGNAME", organization);
xml.element("ORGUNIT", organizationUnit);
xml.optElement("ORGNAME", organization);
xml.optElement("ORGUNIT", organizationUnit);
xml.closeElement("ORG");
}
for (Entry<String, String> entry : otherSimpleFields.entrySet()) {
xml.element(entry.getKey(), entry.getValue());
xml.optElement(entry.getKey(), entry.getValue());
}
for (Entry<String, String> entry : otherUnescapableFields.entrySet()) {
final String value = entry.getValue();
if (value == null) {
continue;
}
xml.openElement(entry.getKey());
xml.append(entry.getValue());
xml.append(value);
xml.closeElement(entry.getKey());
}
if (photoBinval != null) {
@ -611,24 +615,36 @@ public class VCard extends IQ {
xml.closeElement("EMAIL");
}
for (Entry<String, String> phone : workPhones.entrySet()) {
final String number = phone.getValue();
if (number == null) {
continue;
}
xml.openElement("TEL");
xml.emptyElement("WORK");
xml.emptyElement(phone.getKey());
xml.element("NUMBER", phone.getValue());
xml.element("NUMBER", number);
xml.closeElement("TEL");
}
for (Entry<String, String> phone : homePhones.entrySet()) {
final String number = phone.getValue();
if (number == null) {
continue;
}
xml.openElement("TEL");
xml.emptyElement("HOME");
xml.emptyElement(phone.getKey());
xml.element("NUMBER", phone.getValue());
xml.element("NUMBER", number);
xml.closeElement("TEL");
}
if (!workAddr.isEmpty()) {
xml.openElement("ADR");
xml.emptyElement("WORK");
for (Entry<String, String> entry : workAddr.entrySet()) {
xml.element(entry.getKey(), entry.getValue());
final String value = entry.getValue();
if (value == null) {
continue;
}
xml.element(entry.getKey(), value);
}
xml.closeElement("ADR");
}
@ -636,7 +652,11 @@ public class VCard extends IQ {
xml.openElement("ADR");
xml.emptyElement("HOME");
for (Entry<String, String> entry : homeAddr.entrySet()) {
xml.element(entry.getKey(), entry.getValue());
final String value = entry.getValue();
if (value == null) {
continue;
}
xml.element(entry.getKey(), value);
}
xml.closeElement("ADR");
}