aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/parser/IqParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger/parser/IqParser.java')
-rw-r--r--src/main/java/de/pixart/messenger/parser/IqParser.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/main/java/de/pixart/messenger/parser/IqParser.java b/src/main/java/de/pixart/messenger/parser/IqParser.java
index 24e8aad98..c3bd85922 100644
--- a/src/main/java/de/pixart/messenger/parser/IqParser.java
+++ b/src/main/java/de/pixart/messenger/parser/IqParser.java
@@ -26,6 +26,7 @@ import de.pixart.messenger.Config;
import de.pixart.messenger.crypto.axolotl.AxolotlService;
import de.pixart.messenger.entities.Account;
import de.pixart.messenger.entities.Contact;
+import de.pixart.messenger.entities.Conversation;
import de.pixart.messenger.services.XmppConnectionService;
import de.pixart.messenger.utils.Namespace;
import de.pixart.messenger.xml.Element;
@@ -382,6 +383,29 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
response = mXmppConnectionService.getIqGenerator().entityTimeResponse(packet);
}
mXmppConnectionService.sendIqPacket(account, response, null);
+ } else if (packet.hasChild("pubsub", Namespace.PUBSUB) && packet.getType() == IqPacket.TYPE.SET) {
+ final Jid server = packet.getFrom();
+ final Element pubsub = packet.findChild("pubsub", Namespace.PUBSUB);
+ final Element publish = pubsub == null ? null : pubsub.findChild("publish");
+ final String node = publish == null ? null : publish.getAttribute("node");
+ final Element item = publish == null ? null : publish.findChild("item");
+ final Element notification = item == null ? null : item.findChild("notification", Namespace.PUSH);
+ if (notification != null && node != null && server != null) {
+ final Conversation conversation = mXmppConnectionService.findConversationByUuid(node);
+ if (conversation != null && conversation.getAccount() == account && conversation.getJid().getDomain().equals(server.getDomain())) {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received muc push event for " + conversation.getJid().asBareJid());
+ mXmppConnectionService.sendIqPacket(account, packet.generateResponse(IqPacket.TYPE.RESULT), null);
+ mXmppConnectionService.mucSelfPingAndRejoin(conversation);
+ } else {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received push event for unknown conference from " + server);
+ final IqPacket response = packet.generateResponse(IqPacket.TYPE.ERROR);
+ final Element error = response.addChild("error");
+ error.setAttribute("type", "cancel");
+ error.addChild("item-not-found", "urn:ietf:params:xml:ns:xmpp-stanzas");
+ mXmppConnectionService.sendIqPacket(account, response, null);
+ }
+ }
+
} else {
if (packet.getType() == IqPacket.TYPE.GET || packet.getType() == IqPacket.TYPE.SET) {
final IqPacket response = packet.generateResponse(IqPacket.TYPE.ERROR);
@@ -392,5 +416,4 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
}
}
}
-
}