extracting stanza-id where by=account

This commit is contained in:
Daniel Gultsch 2016-10-31 12:07:08 +01:00
parent a5181b22e0
commit 07a71d312a
3 changed files with 19 additions and 2 deletions

View file

@ -31,6 +31,7 @@ import eu.siacs.conversations.http.HttpConnectionManager;
import eu.siacs.conversations.services.MessageArchiveService; import eu.siacs.conversations.services.MessageArchiveService;
import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.utils.Xmlns;
import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.OnMessagePacketReceived; import eu.siacs.conversations.xmpp.OnMessagePacketReceived;
import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.chatstate.ChatState;
@ -208,7 +209,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
private static String extractStanzaId(Element packet, Jid by) { private static String extractStanzaId(Element packet, Jid by) {
for(Element child : packet.getChildren()) { for(Element child : packet.getChildren()) {
if (child.getName().equals("stanza-id") if (child.getName().equals("stanza-id")
&& "urn:xmpp:sid:0".equals(child.getNamespace()) && Xmlns.STANZA_IDS.equals(child.getNamespace())
&& by.equals(child.getAttributeAsJid("by"))) { && by.equals(child.getAttributeAsJid("by"))) {
return child.getAttribute("id"); return child.getAttribute("id");
} }
@ -430,7 +431,18 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
} }
if (serverMsgId == null) { if (serverMsgId == null) {
serverMsgId = extractStanzaId(packet, isTypeGroupChat ? conversation.getJid().toBareJid() : account.getServer()); final Jid by;
final boolean safeToExtract;
if (isTypeGroupChat) {
by = conversation.getJid().toBareJid();
safeToExtract = true; //conversation.getMucOptions().hasFeature(Xmlns.STANZA_IDS);
} else {
by = account.getJid().toBareJid();
safeToExtract = true; //account.getXmppConnection().getFeatures().stanzaIds();
}
if (safeToExtract) {
serverMsgId = extractStanzaId(packet, by);
}
} }
message.setCounterpart(counterpart); message.setCounterpart(counterpart);

View file

@ -6,4 +6,5 @@ public final class Xmlns {
public static final String REGISTER = "jabber:iq:register"; public static final String REGISTER = "jabber:iq:register";
public static final String BYTE_STREAMS = "http://jabber.org/protocol/bytestreams"; public static final String BYTE_STREAMS = "http://jabber.org/protocol/bytestreams";
public static final String HTTP_UPLOAD = "urn:xmpp:http:upload"; public static final String HTTP_UPLOAD = "urn:xmpp:http:upload";
public static final String STANZA_IDS = "urn:xmpp:sid:0";
} }

View file

@ -1685,6 +1685,10 @@ public class XmppConnection implements Runnable {
return -1; return -1;
} }
} }
public boolean stanzaIds() {
return hasDiscoFeature(account.getJid().toBareJid(),Xmlns.STANZA_IDS);
}
} }
private IqGenerator getIqGenerator() { private IqGenerator getIqGenerator() {