diff options
Diffstat (limited to 'src/main/java/de/pixart/messenger/parser/IqParser.java')
-rw-r--r-- | src/main/java/de/pixart/messenger/parser/IqParser.java | 25 |
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 { } } } - } |