use stricter namespace matching in stream parser
This commit is contained in:
parent
5bb8f3f9aa
commit
3dac9ef3f4
|
@ -29,7 +29,7 @@ public class LocalizedContent {
|
||||||
final String childLanguage = child.getAttribute("xml:lang");
|
final String childLanguage = child.getAttribute("xml:lang");
|
||||||
final String lang = childLanguage == null ? parentLanguage : childLanguage;
|
final String lang = childLanguage == null ? parentLanguage : childLanguage;
|
||||||
final String content = child.getContent();
|
final String content = child.getContent();
|
||||||
if (content != null && (namespace == null || "jabber:client".equals(namespace))) {
|
if (content != null && (namespace == null || Namespace.JABBER_CLIENT.equals(namespace))) {
|
||||||
if (contents.put(lang, content) != null) {
|
if (contents.put(lang, content) != null) {
|
||||||
//anything that has multiple contents for the same language is invalid
|
//anything that has multiple contents for the same language is invalid
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -2,6 +2,7 @@ package eu.siacs.conversations.xml;
|
||||||
|
|
||||||
public final class Namespace {
|
public final class Namespace {
|
||||||
public static final String STREAMS = "http://etherx.jabber.org/streams";
|
public static final String STREAMS = "http://etherx.jabber.org/streams";
|
||||||
|
public static final String JABBER_CLIENT = "jabber:client";
|
||||||
public static final String DISCO_ITEMS = "http://jabber.org/protocol/disco#items";
|
public static final String DISCO_ITEMS = "http://jabber.org/protocol/disco#items";
|
||||||
public static final String DISCO_INFO = "http://jabber.org/protocol/disco#info";
|
public static final String DISCO_INFO = "http://jabber.org/protocol/disco#info";
|
||||||
public static final String EXTERNAL_SERVICE_DISCOVERY = "urn:xmpp:extdisco:2";
|
public static final String EXTERNAL_SERVICE_DISCOVERY = "urn:xmpp:extdisco:2";
|
||||||
|
|
|
@ -43,6 +43,10 @@ public class Tag {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String identifier() {
|
||||||
|
return String.format("%s#%s", name, this.attributes.get("xmlns"));
|
||||||
|
}
|
||||||
|
|
||||||
public String getAttribute(final String attrName) {
|
public String getAttribute(final String attrName) {
|
||||||
return this.attributes.get(attrName);
|
return this.attributes.get(attrName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -604,10 +604,10 @@ public class XmppConnection implements Runnable {
|
||||||
} else if (nextTag.isStart("enabled", Namespace.STREAM_MANAGEMENT)) {
|
} else if (nextTag.isStart("enabled", Namespace.STREAM_MANAGEMENT)) {
|
||||||
final Element enabled = tagReader.readElement(nextTag);
|
final Element enabled = tagReader.readElement(nextTag);
|
||||||
processEnabled(enabled);
|
processEnabled(enabled);
|
||||||
} else if (nextTag.isStart("resumed")) {
|
} else if (nextTag.isStart("resumed", Namespace.STREAM_MANAGEMENT)) {
|
||||||
final Element resumed = tagReader.readElement(nextTag);
|
final Element resumed = tagReader.readElement(nextTag);
|
||||||
processResumed(resumed);
|
processResumed(resumed);
|
||||||
} else if (nextTag.isStart("r")) {
|
} else if (nextTag.isStart("r", Namespace.STREAM_MANAGEMENT)) {
|
||||||
tagReader.readElement(nextTag);
|
tagReader.readElement(nextTag);
|
||||||
if (Config.EXTENDED_SM_LOGGING) {
|
if (Config.EXTENDED_SM_LOGGING) {
|
||||||
Log.d(
|
Log.d(
|
||||||
|
@ -618,7 +618,7 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
final AckPacket ack = new AckPacket(this.stanzasReceived);
|
final AckPacket ack = new AckPacket(this.stanzasReceived);
|
||||||
tagWriter.writeStanzaAsync(ack);
|
tagWriter.writeStanzaAsync(ack);
|
||||||
} else if (nextTag.isStart("a")) {
|
} else if (nextTag.isStart("a", Namespace.STREAM_MANAGEMENT)) {
|
||||||
boolean accountUiNeedsRefresh = false;
|
boolean accountUiNeedsRefresh = false;
|
||||||
synchronized (NotificationService.CATCHUP_LOCK) {
|
synchronized (NotificationService.CATCHUP_LOCK) {
|
||||||
if (mWaitingForSmCatchup.compareAndSet(true, false)) {
|
if (mWaitingForSmCatchup.compareAndSet(true, false)) {
|
||||||
|
@ -661,15 +661,22 @@ public class XmppConnection implements Runnable {
|
||||||
if (acknowledgedMessages) {
|
if (acknowledgedMessages) {
|
||||||
mXmppConnectionService.updateConversationUi();
|
mXmppConnectionService.updateConversationUi();
|
||||||
}
|
}
|
||||||
} else if (nextTag.isStart("failed")) {
|
} else if (nextTag.isStart("failed", Namespace.STREAM_MANAGEMENT)) {
|
||||||
final Element failed = tagReader.readElement(nextTag);
|
final Element failed = tagReader.readElement(nextTag);
|
||||||
processFailed(failed, true);
|
processFailed(failed, true);
|
||||||
} else if (nextTag.isStart("iq")) {
|
} else if (nextTag.isStart("iq", Namespace.JABBER_CLIENT)) {
|
||||||
processIq(nextTag);
|
processIq(nextTag);
|
||||||
} else if (nextTag.isStart("message")) {
|
} else if (nextTag.isStart("message", Namespace.JABBER_CLIENT)) {
|
||||||
processMessage(nextTag);
|
processMessage(nextTag);
|
||||||
} else if (nextTag.isStart("presence")) {
|
} else if (nextTag.isStart("presence", Namespace.JABBER_CLIENT)) {
|
||||||
processPresence(nextTag);
|
processPresence(nextTag);
|
||||||
|
} else {
|
||||||
|
Log.e(
|
||||||
|
Config.LOGTAG,
|
||||||
|
account.getJid().asBareJid()
|
||||||
|
+ ": Encountered unknown stream element"
|
||||||
|
+ nextTag.identifier());
|
||||||
|
throw new StateChangingException(Account.State.INCOMPATIBLE_SERVER);
|
||||||
}
|
}
|
||||||
nextTag = tagReader.readTag();
|
nextTag = tagReader.readTag();
|
||||||
}
|
}
|
||||||
|
@ -2263,7 +2270,7 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
stream.setAttribute("version", "1.0");
|
stream.setAttribute("version", "1.0");
|
||||||
stream.setAttribute("xml:lang", LocalizedContent.STREAM_LANGUAGE);
|
stream.setAttribute("xml:lang", LocalizedContent.STREAM_LANGUAGE);
|
||||||
stream.setAttribute("xmlns", "jabber:client");
|
stream.setAttribute("xmlns", Namespace.JABBER_CLIENT);
|
||||||
stream.setAttribute("xmlns:stream", Namespace.STREAMS);
|
stream.setAttribute("xmlns:stream", Namespace.STREAMS);
|
||||||
tagWriter.writeTag(stream, flush);
|
tagWriter.writeTag(stream, flush);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue