Update more files to use JID objects
This commit is contained in:
parent
9053f4aca0
commit
f15900426d
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -161,4 +161,8 @@ public final class Jid {
|
|||
result = 31 * result + resourcepart.hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean isBareJid() {
|
||||
return this.resourcepart.isEmpty();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 Jid getTo() {
|
||||
try {
|
||||
return Jid.fromString(getAttribute("to"));
|
||||
} catch (final InvalidJidException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getFrom() {
|
||||
return getAttribute("from");
|
||||
}
|
||||
public Jid getFrom() {
|
||||
try {
|
||||
return Jid.fromString(getAttribute("from"));
|
||||
} catch (final InvalidJidException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return this.getAttribute("id");
|
||||
|
|
Loading…
Reference in a new issue