summaryrefslogtreecommitdiff
path: root/protocols/WhatsApp/src/proto.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/WhatsApp/src/proto.h')
-rw-r--r--protocols/WhatsApp/src/proto.h59
1 files changed, 44 insertions, 15 deletions
diff --git a/protocols/WhatsApp/src/proto.h b/protocols/WhatsApp/src/proto.h
index 290aa6c392..a699c91481 100644
--- a/protocols/WhatsApp/src/proto.h
+++ b/protocols/WhatsApp/src/proto.h
@@ -41,28 +41,57 @@ struct WAMediaKeys
uint8_t macKey[64];
};
-struct WARequest
+/////////////////////////////////////////////////////////////////////////////////////////
+// own requests
+
+struct WARequestBase
{
- WARequest(const CMStringA &_1, WA_PKT_HANDLER _2) :
- szPacketId(_1),
- pHandler(_2),
- pUserInfo(nullptr)
+ WARequestBase(const CMStringA &_1) :
+ szPacketId(_1)
{}
+ virtual ~WARequestBase() {}
- WARequest(const CMStringA &_1, WA_PKT_HANDLER_FULL _2, void *_3) :
- szPacketId(_1),
- pHandlerFull(_2),
- pUserInfo(_3)
+ CMStringA szPacketId;
+
+ virtual void Execute(WhatsAppProto *ppro, const WANode &node) = 0;
+};
+
+class WARequestSimple : public WARequestBase
+{
+ WA_PKT_HANDLER pHandler;
+
+public:
+ WARequestSimple(const CMStringA &_1, WA_PKT_HANDLER _2) :
+ WARequestBase(_1),
+ pHandler(_2)
{}
- CMStringA szPacketId;
- union {
- WA_PKT_HANDLER pHandler;
- WA_PKT_HANDLER_FULL pHandlerFull;
- };
+ void Execute(WhatsAppProto *ppro, const WANode &node) override
+ {
+ (ppro->*pHandler)(node);
+ }
+};
+
+class WARequestParam : public WARequestBase
+{
+ WA_PKT_HANDLER_FULL pHandler;
void *pUserInfo;
+
+public:
+ WARequestParam(const CMStringA &_1, WA_PKT_HANDLER_FULL _2, void *_3) :
+ WARequestBase(_1),
+ pHandler(_2),
+ pUserInfo(_3)
+ {}
+
+ void Execute(WhatsAppProto *ppro, const WANode &node) override
+ {
+ (ppro->*pHandler)(node, pUserInfo);
+ }
};
+/////////////////////////////////////////////////////////////////////////////////////////
+
struct WAPersistentHandler
{
WAPersistentHandler(const char *_1, const char *_2, const char *_3, const char *_4, WA_PKT_HANDLER _5) :
@@ -310,7 +339,7 @@ class WhatsAppProto : public PROTO<WhatsAppProto>
HNETLIBCONN m_hServerConn;
mir_cs m_csPacketQueue;
- OBJLIST<WARequest> m_arPacketQueue;
+ OBJLIST<WARequestBase> m_arPacketQueue;
LIST<WAPersistentHandler> m_arPersistent;
WA_PKT_HANDLER FindPersistentHandler(const WANode &node);