summaryrefslogtreecommitdiff
path: root/protocols/WhatsApp/src/iq.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/WhatsApp/src/iq.cpp')
-rw-r--r--protocols/WhatsApp/src/iq.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/protocols/WhatsApp/src/iq.cpp b/protocols/WhatsApp/src/iq.cpp
index 3c0cd8c64f..2f8b7fb3d6 100644
--- a/protocols/WhatsApp/src/iq.cpp
+++ b/protocols/WhatsApp/src/iq.cpp
@@ -82,6 +82,16 @@ void WhatsAppProto::OnIqDoNothing(const WANode&)
/////////////////////////////////////////////////////////////////////////////////////////
+void WhatsAppProto::OnIqGetKeys(const WANode &node)
+{
+ if (auto *pList = node.getChild("list"))
+ for (auto &it : pList->getChildren())
+ if (it->title == "user")
+ m_signalStore.injectSession(it);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
void WhatsAppProto::OnIqGetUsync(const WANode &node)
{
m_arDevices.destroy();
@@ -92,6 +102,16 @@ void WhatsAppProto::OnIqGetUsync(const WANode &node)
for (auto &it : pList->getChildren())
if (it->title == "device")
m_arDevices.insert(new WAJid(pszJid, it->getAttrInt("id")));
+
+ WANodeIq iq(IQ::GET, "encrypt");
+ auto *pKey = iq.addChild("key");
+ for (auto &it : m_arDevices) {
+ auto blob = getBlob(MSignalSession(it->user, it->device).getSetting());
+ if (blob.isEmpty())
+ pKey->addChild("user")->addAttr("jid", it->toString());
+ }
+ if (pKey->getChildren().getCount() > 0)
+ WSSendNode(iq, &WhatsAppProto::OnIqGetKeys);
}
}