diff options
Diffstat (limited to 'protocols/WhatsApp/src/proto.h')
-rw-r--r-- | protocols/WhatsApp/src/proto.h | 59 |
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); |