Update more files to use JID objects

Sam Whited created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java                 |  6 
src/main/java/eu/siacs/conversations/parser/IqParser.java                     |  7 
src/main/java/eu/siacs/conversations/parser/MessageParser.java                | 93 
src/main/java/eu/siacs/conversations/parser/PresenceParser.java               | 27 
src/main/java/eu/siacs/conversations/xml/Element.java                         | 42 
src/main/java/eu/siacs/conversations/xmpp/jid/Jid.java                        |  4 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleCandidate.java         | 31 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java        | 25 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java | 18 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java   | 13 
src/main/java/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java    |  5 
src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractStanza.java         | 23 
12 files changed, 179 insertions(+), 115 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/MucOptions.java 🔗

@@ -152,9 +152,9 @@ public class MucOptions {
 	}
 
 	public void processPacket(PresencePacket packet, PgpEngine pgp) {
-		String[] fromParts = packet.getFrom().split("/", 2);
-		if (fromParts.length >= 2) {
-			String name = fromParts[1];
+        final Jid from = packet.getFrom();
+		if (!from.isBareJid()) {
+			final String name = from.getResourcepart();
 			String type = packet.getAttribute("type");
 			if (type == null) {
 				User user = new User();

src/main/java/eu/siacs/conversations/parser/IqParser.java 🔗

@@ -67,12 +67,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
 	@Override
 	public void onIqPacketReceived(Account account, IqPacket packet) {
 		if (packet.hasChild("query", "jabber:iq:roster")) {
-            Jid from = null;
-            try {
-                from = Jid.fromString(packet.getFrom());
-            } catch (final InvalidJidException e) {
-                // TODO: Handle this?
-            }
+            final Jid from = packet.getFrom();
             if ((from == null) || (from.equals(account.getJid()))) {
 				Element query = packet.findChild("query");
 				this.rosterItems(account, query);

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -11,6 +11,8 @@ import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.utils.CryptoHelper;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.OnMessagePacketReceived;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
+import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.pep.Avatar;
 import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
 
@@ -21,9 +23,9 @@ public class MessageParser extends AbstractParser implements
 	}
 
 	private Message parseChat(MessagePacket packet, Account account) {
-		String[] fromParts = packet.getFrom().split("/", 2);
+        final Jid jid = packet.getFrom().toBareJid();
 		Conversation conversation = mXmppConnectionService
-				.findOrCreateConversation(account, fromParts[0], false);
+				.findOrCreateConversation(account, jid.toBareJid(), false);
 		updateLastseen(packet, account, true);
 		String pgpBody = getPgpBody(packet);
 		Message finishedMessage;
@@ -38,11 +40,11 @@ public class MessageParser extends AbstractParser implements
 		finishedMessage.setRemoteMsgId(packet.getId());
 		finishedMessage.markable = isMarkable(packet);
 		if (conversation.getMode() == Conversation.MODE_MULTI
-				&& fromParts.length >= 2) {
+				&& !jid.getResourcepart().isEmpty()) {
 			finishedMessage.setType(Message.TYPE_PRIVATE);
-			finishedMessage.setPresence(fromParts[1]);
+			finishedMessage.setPresence(jid.getResourcepart());
 			finishedMessage.setTrueCounterpart(conversation.getMucOptions()
-					.getTrueCounterpart(fromParts[1]));
+					.getTrueCounterpart(jid.getResourcepart()));
 			if (conversation.hasDuplicateMessage(finishedMessage)) {
 				return null;
 			}
@@ -53,16 +55,16 @@ public class MessageParser extends AbstractParser implements
 	}
 
 	private Message parseOtrChat(MessagePacket packet, Account account) {
-		boolean properlyAddressed = (packet.getTo().split("/", 2).length == 2)
+		boolean properlyAddressed = (!packet.getTo().isBareJid())
 				|| (account.countPresences() == 1);
-		String[] fromParts = packet.getFrom().split("/", 2);
+        final Jid from = packet.getFrom();
 		Conversation conversation = mXmppConnectionService
-				.findOrCreateConversation(account, fromParts[0], false);
+				.findOrCreateConversation(account, from.toBareJid(), false);
 		String presence;
-		if (fromParts.length >= 2) {
-			presence = fromParts[1];
+		if (from.isBareJid()) {
+            presence = "";
 		} else {
-			presence = "";
+			presence = from.getResourcepart();
 		}
 		updateLastseen(packet, account, true);
 		String body = packet.getBody();
@@ -127,24 +129,23 @@ public class MessageParser extends AbstractParser implements
 
 	private Message parseGroupchat(MessagePacket packet, Account account) {
 		int status;
-		String[] fromParts = packet.getFrom().split("/", 2);
+        final Jid from = packet.getFrom();
 		if (mXmppConnectionService.find(account.pendingConferenceLeaves,
-				account, fromParts[0]) != null) {
+				account, from.toBareJid()) != null) {
 			return null;
 		}
 		Conversation conversation = mXmppConnectionService
-				.findOrCreateConversation(account, fromParts[0], true);
+				.findOrCreateConversation(account, from.toBareJid(), true);
 		if (packet.hasChild("subject")) {
 			conversation.getMucOptions().setSubject(
 					packet.findChild("subject").getContent());
 			mXmppConnectionService.updateConversationUi();
 			return null;
 		}
-		if ((fromParts.length == 1)) {
+		if (from.isBareJid()) {
 			return null;
 		}
-		String counterPart = fromParts[1];
-		if (counterPart.equals(conversation.getMucOptions().getActualNick())) {
+		if (from.getResourcepart().equals(conversation.getMucOptions().getActualNick())) {
 			if (mXmppConnectionService.markMessage(conversation,
 					packet.getId(), Message.STATUS_SEND)) {
 				return null;
@@ -157,17 +158,17 @@ public class MessageParser extends AbstractParser implements
 		String pgpBody = getPgpBody(packet);
 		Message finishedMessage;
 		if (pgpBody == null) {
-			finishedMessage = new Message(conversation, counterPart,
+			finishedMessage = new Message(conversation, from,
 					packet.getBody(), Message.ENCRYPTION_NONE, status);
 		} else {
-			finishedMessage = new Message(conversation, counterPart, pgpBody,
+			finishedMessage = new Message(conversation, from, pgpBody,
 					Message.ENCRYPTION_PGP, status);
 		}
 		finishedMessage.setRemoteMsgId(packet.getId());
 		finishedMessage.markable = isMarkable(packet);
 		if (status == Message.STATUS_RECEIVED) {
 			finishedMessage.setTrueCounterpart(conversation.getMucOptions()
-					.getTrueCounterpart(counterPart));
+					.getTrueCounterpart(from.getResourcepart()));
 		}
 		if (packet.hasChild("delay")
 				&& conversation.hasDuplicateMessage(finishedMessage)) {
@@ -177,9 +178,9 @@ public class MessageParser extends AbstractParser implements
 		return finishedMessage;
 	}
 
-	private Message parseCarbonMessage(MessagePacket packet, Account account) {
+	private Message parseCarbonMessage(final MessagePacket packet, final Account account) {
 		int status;
-		String fullJid;
+		final Jid fullJid;
 		Element forwarded;
 		if (packet.hasChild("received", "urn:xmpp:carbons:2")) {
 			forwarded = packet.findChild("received", "urn:xmpp:carbons:2")
@@ -205,11 +206,11 @@ public class MessageParser extends AbstractParser implements
 				parseNonMessage(message, account);
 			} else if (status == Message.STATUS_SEND
 					&& message.hasChild("displayed", "urn:xmpp:chat-markers:0")) {
-				String to = message.getAttribute("to");
+				final Jid to = message.getTo();
 				if (to != null) {
-					Conversation conversation = mXmppConnectionService.find(
+					final Conversation conversation = mXmppConnectionService.find(
 							mXmppConnectionService.getConversations(), account,
-							to.split("/")[0]);
+							to.toBareJid());
 					if (conversation != null) {
 						mXmppConnectionService.markRead(conversation, false);
 					}
@@ -218,21 +219,20 @@ public class MessageParser extends AbstractParser implements
 			return null;
 		}
 		if (status == Message.STATUS_RECEIVED) {
-			fullJid = message.getAttribute("from");
+			fullJid = message.getFrom();
 			if (fullJid == null) {
 				return null;
 			} else {
 				updateLastseen(message, account, true);
 			}
 		} else {
-			fullJid = message.getAttribute("to");
+			fullJid = message.getTo();
 			if (fullJid == null) {
 				return null;
 			}
 		}
-		String[] parts = fullJid.split("/", 2);
 		Conversation conversation = mXmppConnectionService
-				.findOrCreateConversation(account, parts[0], false);
+				.findOrCreateConversation(account, fullJid.toBareJid(), false);
 		String pgpBody = getPgpBody(message);
 		Message finishedMessage;
 		if (pgpBody != null) {
@@ -247,11 +247,11 @@ public class MessageParser extends AbstractParser implements
 		finishedMessage.setRemoteMsgId(message.getAttribute("id"));
 		finishedMessage.markable = isMarkable(message);
 		if (conversation.getMode() == Conversation.MODE_MULTI
-				&& parts.length >= 2) {
+				&& !fullJid.isBareJid()) {
 			finishedMessage.setType(Message.TYPE_PRIVATE);
-			finishedMessage.setPresence(parts[1]);
+			finishedMessage.setPresence(fullJid.getResourcepart());
 			finishedMessage.setTrueCounterpart(conversation.getMucOptions()
-					.getTrueCounterpart(parts[1]));
+					.getTrueCounterpart(fullJid.getResourcepart()));
 			if (conversation.hasDuplicateMessage(finishedMessage)) {
 				return null;
 			}
@@ -259,39 +259,39 @@ public class MessageParser extends AbstractParser implements
 		return finishedMessage;
 	}
 
-	private void parseError(MessagePacket packet, Account account) {
-		String[] fromParts = packet.getFrom().split("/", 2);
-		mXmppConnectionService.markMessage(account, fromParts[0],
+	private void parseError(final MessagePacket packet, final Account account) {
+		final Jid from = packet.getFrom();
+		mXmppConnectionService.markMessage(account, from.toBareJid(),
 				packet.getId(), Message.STATUS_SEND_FAILED);
 	}
 
 	private void parseNonMessage(Element packet, Account account) {
-		String from = packet.getAttribute("from");
+		final Jid from = packet.getFrom();
 		if (packet.hasChild("event", "http://jabber.org/protocol/pubsub#event")) {
 			Element event = packet.findChild("event",
 					"http://jabber.org/protocol/pubsub#event");
-			parseEvent(event, packet.getAttribute("from"), account);
+			parseEvent(event, from, account);
 		} else if (from != null
 				&& packet.hasChild("displayed", "urn:xmpp:chat-markers:0")) {
 			String id = packet
 					.findChild("displayed", "urn:xmpp:chat-markers:0")
 					.getAttribute("id");
 			updateLastseen(packet, account, true);
-			mXmppConnectionService.markMessage(account, from.split("/", 2)[0],
+			mXmppConnectionService.markMessage(account, from.toBareJid(),
 					id, Message.STATUS_SEND_DISPLAYED);
 		} else if (from != null
 				&& packet.hasChild("received", "urn:xmpp:chat-markers:0")) {
 			String id = packet.findChild("received", "urn:xmpp:chat-markers:0")
 					.getAttribute("id");
 			updateLastseen(packet, account, false);
-			mXmppConnectionService.markMessage(account, from.split("/", 2)[0],
+			mXmppConnectionService.markMessage(account, from.toBareJid(),
 					id, Message.STATUS_SEND_RECEIVED);
 		} else if (from != null
 				&& packet.hasChild("received", "urn:xmpp:receipts")) {
 			String id = packet.findChild("received", "urn:xmpp:receipts")
 					.getAttribute("id");
 			updateLastseen(packet, account, false);
-			mXmppConnectionService.markMessage(account, from.split("/", 2)[0],
+			mXmppConnectionService.markMessage(account, from.toBareJid(),
 					id, Message.STATUS_SEND_RECEIVED);
 		} else if (packet.hasChild("x", "http://jabber.org/protocol/muc#user")) {
 			Element x = packet.findChild("x",
@@ -299,7 +299,7 @@ public class MessageParser extends AbstractParser implements
 			if (x.hasChild("invite")) {
 				Conversation conversation = mXmppConnectionService
 						.findOrCreateConversation(account,
-								packet.getAttribute("from"), true);
+								packet.getFrom(), true);
 				if (!conversation.getMucOptions().online()) {
 					if (x.hasChild("password")) {
 						Element password = x.findChild("password");
@@ -314,8 +314,13 @@ public class MessageParser extends AbstractParser implements
 			}
 		} else if (packet.hasChild("x", "jabber:x:conference")) {
 			Element x = packet.findChild("x", "jabber:x:conference");
-			String jid = x.getAttribute("jid");
-			String password = x.getAttribute("password");
+            Jid jid;
+            try {
+                jid = Jid.fromString(x.getAttribute("jid"));
+            } catch (InvalidJidException e) {
+                jid = null;
+            }
+            String password = x.getAttribute("password");
 			if (jid != null) {
 				Conversation conversation = mXmppConnectionService
 						.findOrCreateConversation(account, jid, true);
@@ -332,7 +337,7 @@ public class MessageParser extends AbstractParser implements
 		}
 	}
 
-	private void parseEvent(Element event, String from, Account account) {
+	private void parseEvent(final Element event, final Jid from, final Account account) {
 		Element items = event.findChild("items");
 		String node = items.getAttribute("node");
 		if (node != null) {

src/main/java/eu/siacs/conversations/parser/PresenceParser.java 🔗

@@ -9,6 +9,7 @@ import eu.siacs.conversations.generator.PresenceGenerator;
 import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.OnPresencePacketReceived;
+import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.stanzas.PresencePacket;
 
 public class PresenceParser extends AbstractParser implements
@@ -21,8 +22,8 @@ public class PresenceParser extends AbstractParser implements
 	public void parseConferencePresence(PresencePacket packet, Account account) {
 		PgpEngine mPgpEngine = mXmppConnectionService.getPgpEngine();
 		if (packet.hasChild("x", "http://jabber.org/protocol/muc#user")) {
-			Conversation muc = mXmppConnectionService.find(account, packet
-					.getAttribute("from").split("/", 2)[0]);
+			final Conversation muc = mXmppConnectionService.find(account,
+                    packet.getFrom().toBareJid());
 			if (muc != null) {
 				boolean before = muc.getMucOptions().online();
 				muc.getMucOptions().processPacket(packet, mPgpEngine);
@@ -32,8 +33,8 @@ public class PresenceParser extends AbstractParser implements
 				mXmppConnectionService.getAvatarService().clear(muc);
 			}
 		} else if (packet.hasChild("x", "http://jabber.org/protocol/muc")) {
-			Conversation muc = mXmppConnectionService.find(account, packet
-					.getAttribute("from").split("/", 2)[0]);
+			final Conversation muc = mXmppConnectionService.find(account,
+                    packet.getFrom().toBareJid());
 			if (muc != null) {
 				boolean before = muc.getMucOptions().online();
 				muc.getMucOptions().processPacket(packet, mPgpEngine);
@@ -51,15 +52,15 @@ public class PresenceParser extends AbstractParser implements
 		if (packet.getFrom() == null) {
 			return;
 		}
-		String[] fromParts = packet.getFrom().split("/", 2);
+        final Jid from = packet.getFrom();
 		String type = packet.getAttribute("type");
-		if (fromParts[0].equals(account.getJid())) {
-			if (fromParts.length == 2) {
+		if (from.toBareJid().equals(account.getJid())) {
+			if (!from.getResourcepart().isEmpty()) {
 				if (type == null) {
-					account.updatePresence(fromParts[1],
+					account.updatePresence(from.getResourcepart(),
 							Presences.parseShow(packet.findChild("show")));
 				} else if (type.equals("unavailable")) {
-					account.removePresence(fromParts[1]);
+					account.removePresence(from.getResourcepart());
 					account.deactivateGracePeriod();
 				}
 			}
@@ -67,8 +68,8 @@ public class PresenceParser extends AbstractParser implements
 			Contact contact = account.getRoster().getContact(packet.getFrom());
 			if (type == null) {
 				String presence;
-				if (fromParts.length >= 2) {
-					presence = fromParts[1];
+				if (!from.getResourcepart().isEmpty()) {
+					presence = from.getResourcepart();
 				} else {
 					presence = "";
 				}
@@ -95,10 +96,10 @@ public class PresenceParser extends AbstractParser implements
 				mXmppConnectionService.onContactStatusChanged
 						.onContactStatusChanged(contact, online);
 			} else if (type.equals("unavailable")) {
-				if (fromParts.length != 2) {
+				if (from.isBareJid()) {
 					contact.clearPresences();
 				} else {
-					contact.removePresence(fromParts[1]);
+					contact.removePresence(from.getResourcepart());
 				}
 				mXmppConnectionService.onContactStatusChanged
 						.onContactStatusChanged(contact, false);

src/main/java/eu/siacs/conversations/xml/Element.java 🔗

@@ -5,12 +5,14 @@ import java.util.Hashtable;
 import java.util.List;
 
 import eu.siacs.conversations.utils.XmlHelper;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
+import eu.siacs.conversations.xmpp.jid.Jid;
 
 public class Element {
 	protected String name;
-	protected Hashtable<String, String> attributes = new Hashtable<String, String>();
+	protected Hashtable<String, String> attributes = new Hashtable<>();
 	protected String content;
-	protected List<Element> children = new ArrayList<Element>();
+	protected List<Element> children = new ArrayList<>();
 
 	public Element(String name) {
 		this.name = name;
@@ -103,6 +105,42 @@ public class Element {
 		}
 	}
 
+    public Jid getJid() {
+        final String jid = this.getAttribute("jid");
+        if (jid != null && !jid.isEmpty()) {
+            try {
+                return Jid.fromString(jid);
+            } catch (final InvalidJidException e) {
+                return null;
+            }
+        }
+        return null;
+    }
+
+    public Jid getTo() {
+        final String to = this.getAttribute("to");
+        if (to != null && !to.isEmpty()) {
+            try {
+                return Jid.fromString(to);
+            } catch (final InvalidJidException e) {
+                return null;
+            }
+        }
+        return null;
+    }
+
+    public Jid getFrom() {
+        final String from = this.getAttribute("from");
+        if (from != null && !from.isEmpty()) {
+            try {
+                return Jid.fromString(from);
+            } catch (final InvalidJidException e) {
+                return null;
+            }
+        }
+        return null;
+    }
+
 	public Hashtable<String, String> getAttributes() {
 		return this.attributes;
 	}

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleCandidate.java 🔗

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.jid.Jid;
 
 public class JingleCandidate {
 
@@ -17,7 +18,7 @@ public class JingleCandidate {
 	private String host;
 	private int port;
 	private int type;
-	private String jid;
+	private Jid jid;
 	private int priority;
 
 	public JingleCandidate(String cid, boolean ours) {
@@ -37,11 +38,11 @@ public class JingleCandidate {
 		return this.host;
 	}
 
-	public void setJid(String jid) {
+	public void setJid(final Jid jid) {
 		this.jid = jid;
 	}
 
-	public String getJid() {
+	public Jid getJid() {
 		return this.jid;
 	}
 
@@ -58,13 +59,17 @@ public class JingleCandidate {
 	}
 
 	public void setType(String type) {
-		if ("proxy".equals(type)) {
-			this.type = TYPE_PROXY;
-		} else if ("direct".equals(type)) {
-			this.type = TYPE_DIRECT;
-		} else {
-			this.type = TYPE_UNKNOWN;
-		}
+        switch (type) {
+            case "proxy":
+                this.type = TYPE_PROXY;
+                break;
+            case "direct":
+                this.type = TYPE_DIRECT;
+                break;
+            default:
+                this.type = TYPE_UNKNOWN;
+                break;
+        }
 	}
 
 	public void setPriority(int i) {
@@ -93,7 +98,7 @@ public class JingleCandidate {
 	}
 
 	public static List<JingleCandidate> parse(List<Element> canditates) {
-		List<JingleCandidate> parsedCandidates = new ArrayList<JingleCandidate>();
+		List<JingleCandidate> parsedCandidates = new ArrayList<>();
 		for (Element c : canditates) {
 			parsedCandidates.add(JingleCandidate.parse(c));
 		}
@@ -104,7 +109,7 @@ public class JingleCandidate {
 		JingleCandidate parsedCandidate = new JingleCandidate(
 				candidate.getAttribute("cid"), false);
 		parsedCandidate.setHost(candidate.getAttribute("host"));
-		parsedCandidate.setJid(candidate.getAttribute("jid"));
+		parsedCandidate.setJid(candidate.getJid());
 		parsedCandidate.setType(candidate.getAttribute("type"));
 		parsedCandidate.setPriority(Integer.parseInt(candidate
 				.getAttribute("priority")));
@@ -118,7 +123,7 @@ public class JingleCandidate {
 		element.setAttribute("cid", this.getCid());
 		element.setAttribute("host", this.getHost());
 		element.setAttribute("port", Integer.toString(this.getPort()));
-		element.setAttribute("jid", this.getJid());
+		element.setAttribute("jid", this.getJid().toString());
 		element.setAttribute("priority", Integer.toString(this.getPriority()));
 		if (this.getType() == TYPE_DIRECT) {
 			element.setAttribute("type", "direct");

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java 🔗

@@ -21,6 +21,7 @@ import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.OnIqPacketReceived;
+import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.jingle.stanzas.Content;
 import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket;
 import eu.siacs.conversations.xmpp.jingle.stanzas.Reason;
@@ -49,10 +50,10 @@ public class JingleConnection implements Downloadable {
 	private Message message;
 	private String sessionId;
 	private Account account;
-	private String initiator;
-	private String responder;
-	private List<JingleCandidate> candidates = new ArrayList<JingleCandidate>();
-	private ConcurrentHashMap<String, JingleSocks5Transport> connections = new ConcurrentHashMap<String, JingleSocks5Transport>();
+	private Jid initiator;
+	private Jid responder;
+	private List<JingleCandidate> candidates = new ArrayList<>();
+	private ConcurrentHashMap<String, JingleSocks5Transport> connections = new ConcurrentHashMap<>();
 
 	private String transportId;
 	private Element fileOffer;
@@ -150,7 +151,7 @@ public class JingleConnection implements Downloadable {
 		return this.account;
 	}
 
-	public String getCounterPart() {
+	public Jid getCounterPart() {
 		return this.message.getCounterpart();
 	}
 
@@ -254,14 +255,14 @@ public class JingleConnection implements Downloadable {
 		this.mJingleStatus = JINGLE_STATUS_INITIATED;
 		Conversation conversation = this.mXmppConnectionService
 				.findOrCreateConversation(account,
-						packet.getFrom().split("/", 2)[0], false);
+						packet.getFrom().toBareJid(), false);
 		this.message = new Message(conversation, "", Message.ENCRYPTION_NONE);
 		this.message.setStatus(Message.STATUS_RECEIVED);
 		this.message.setType(Message.TYPE_IMAGE);
 		this.mStatus = Downloadable.STATUS_OFFER;
 		this.message.setDownloadable(this);
-		String[] fromParts = packet.getFrom().split("/", 2);
-		this.message.setPresence(fromParts[1]);
+        final Jid from = packet.getFrom();
+		this.message.setPresence(from.isBareJid() ? "" : from.getResourcepart());
 		this.account = account;
 		this.initiator = packet.getFrom();
 		this.responder = this.account.getFullJid();
@@ -375,7 +376,7 @@ public class JingleConnection implements Downloadable {
 	}
 
 	private List<Element> getCandidatesAsElements() {
-		List<Element> elements = new ArrayList<Element>();
+		List<Element> elements = new ArrayList<>();
 		for (JingleCandidate c : this.candidates) {
 			elements.add(c.toElement());
 		}
@@ -547,7 +548,7 @@ public class JingleConnection implements Downloadable {
 					activation.query("http://jabber.org/protocol/bytestreams")
 							.setAttribute("sid", this.getSessionId());
 					activation.query().addChild("activate")
-							.setContent(this.getCounterPart());
+							.setContent(this.getCounterPart().toString());
 					this.account.getXmppConnection().sendIqPacket(activation,
 							new OnIqPacketReceived() {
 
@@ -810,11 +811,11 @@ public class JingleConnection implements Downloadable {
 		this.sendJinglePacket(packet);
 	}
 
-	public String getInitiator() {
+	public Jid getInitiator() {
 		return this.initiator;
 	}
 
-	public String getResponder() {
+	public Jid getResponder() {
 		return this.responder;
 	}
 

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java 🔗

@@ -14,13 +14,15 @@ import eu.siacs.conversations.services.AbstractConnectionManager;
 import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.OnIqPacketReceived;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
+import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket;
 import eu.siacs.conversations.xmpp.stanzas.IqPacket;
 
 public class JingleConnectionManager extends AbstractConnectionManager {
-	private List<JingleConnection> connections = new CopyOnWriteArrayList<JingleConnection>();
+	private List<JingleConnection> connections = new CopyOnWriteArrayList<>();
 
-	private HashMap<String, JingleCandidate> primaryCandidates = new HashMap<String, JingleCandidate>();
+	private HashMap<Jid, JingleCandidate> primaryCandidates = new HashMap<>();
 
 	@SuppressLint("TrulyRandom")
 	private SecureRandom random = new SecureRandom();
@@ -61,7 +63,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 		return connection;
 	}
 
-	public JingleConnection createNewConnection(JinglePacket packet) {
+	public JingleConnection createNewConnection(final JinglePacket packet) {
 		JingleConnection connection = new JingleConnection(this);
 		this.connections.add(connection);
 		return connection;
@@ -79,7 +81,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 					.findDiscoItemByFeature(xmlns);
 			if (proxy != null) {
 				IqPacket iq = new IqPacket(IqPacket.TYPE_GET);
-				iq.setTo(proxy);
+				iq.setAttribute("to", proxy);
 				iq.query(xmlns);
 				account.getXmppConnection().sendIqPacket(iq,
 						new OnIqPacketReceived() {
@@ -101,8 +103,12 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 													.getAttribute("port")));
 									candidate
 											.setType(JingleCandidate.TYPE_PROXY);
-									candidate.setJid(proxy);
-									candidate.setPriority(655360 + 65535);
+                                    try {
+                                        candidate.setJid(Jid.fromString(proxy));
+                                    } catch (final InvalidJidException e) {
+                                        candidate.setJid(null);
+                                    }
+                                    candidate.setPriority(655360 + 65535);
 									primaryCandidates.put(account.getJid(),
 											candidate);
 									listener.onPrimaryCandidateFound(true,

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java 🔗

@@ -13,12 +13,13 @@ import eu.siacs.conversations.entities.DownloadableFile;
 import eu.siacs.conversations.utils.CryptoHelper;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.OnIqPacketReceived;
+import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.stanzas.IqPacket;
 
 public class JingleInbandTransport extends JingleTransport {
 
 	private Account account;
-	private String counterpart;
+	private Jid counterpart;
 	private int blockSize;
 	private int bufferSize;
 	private int seq = 0;
@@ -44,8 +45,8 @@ public class JingleInbandTransport extends JingleTransport {
 		}
 	};
 
-	public JingleInbandTransport(Account account, String counterpart,
-			String sid, int blocksize) {
+	public JingleInbandTransport(final Account account, final Jid counterpart,
+			final String sid, final int blocksize) {
 		this.account = account;
 		this.counterpart = counterpart;
 		this.blockSize = blocksize;
@@ -92,12 +93,10 @@ public class JingleInbandTransport extends JingleTransport {
 				return;
 			}
 			this.remainingSize = file.getExpectedSize();
-		} catch (NoSuchAlgorithmException e) {
-			callback.onFileTransferAborted();
-		} catch (IOException e) {
+		} catch (final NoSuchAlgorithmException | IOException e) {
 			callback.onFileTransferAborted();
 		}
-	}
+    }
 
 	@Override
 	public void send(DownloadableFile file,

src/main/java/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java 🔗

@@ -1,6 +1,7 @@
 package eu.siacs.conversations.xmpp.jingle.stanzas;
 
 import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.stanzas.IqPacket;
 
 public class JinglePacket extends IqPacket {
@@ -85,8 +86,8 @@ public class JinglePacket extends IqPacket {
 		return this.jingle.getAttribute("action");
 	}
 
-	public void setInitiator(String initiator) {
-		this.jingle.setAttribute("initiator", initiator);
+	public void setInitiator(final Jid initiator) {
+		this.jingle.setAttribute("initiator", initiator.toString());
 	}
 
 	public boolean isAction(String action) {

src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractStanza.java 🔗

@@ -1,6 +1,7 @@
 package eu.siacs.conversations.xmpp.stanzas;
 
 import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
 import eu.siacs.conversations.xmpp.jid.Jid;
 
 public class AbstractStanza extends Element {
@@ -9,13 +10,21 @@ public class AbstractStanza extends Element {
 		super(name);
 	}
 
-	public String getTo() {
-		return getAttribute("to");
-	}
-
-	public String getFrom() {
-		return getAttribute("from");
-	}
+	public Jid getTo() {
+        try {
+            return Jid.fromString(getAttribute("to"));
+        } catch (final InvalidJidException e) {
+            return null;
+        }
+    }
+
+	public Jid getFrom() {
+        try {
+            return Jid.fromString(getAttribute("from"));
+        } catch (final InvalidJidException e) {
+            return null;
+        }
+    }
 
 	public String getId() {
 		return this.getAttribute("id");