From ab3d423b1dc514e9db61c170ca14bab49e5280cb Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 26 Jan 2024 23:34:30 +0300 Subject: major atavism, PROTORECVEVENT, died with its own set of constants --- include/delphi/m_protosvc.inc | 10 ---- include/m_protoint.h | 6 +-- include/m_protosvc.h | 32 ++----------- libs/win32/mir_app.lib | Bin 291238 -> 291208 bytes libs/win64/mir_app.lib | Bin 290986 -> 290956 bytes plugins/FileAsMessage/src/main.cpp | 6 +-- plugins/Jingle/src/account.cpp | 8 ++-- plugins/MirLua/src/Modules/m_protocols.cpp | 5 -- plugins/MirOTR/src/svcs_proto.cpp | 16 +++---- plugins/MirOTR/src/utils.cpp | 20 ++++---- plugins/New_GPG/src/messages.cpp | 8 ++-- plugins/Scriver/src/globals.cpp | 2 +- plugins/Scriver/src/msgdialog.cpp | 4 +- plugins/SecureIM/src/crypt_dll.cpp | 4 +- plugins/SecureIM/src/svcs_proto.cpp | 28 +++++------ plugins/TabSRMM/src/msgdialog.cpp | 2 +- plugins/TabSRMM/src/sendqueue.cpp | 2 +- plugins/Watrack/proto/proto.pas | 32 +++++-------- protocols/Discord/src/dispatch.cpp | 14 +++--- protocols/Discord/src/proto.cpp | 4 +- protocols/Discord/src/proto.h | 2 +- protocols/Discord/src/utils.cpp | 10 ++-- protocols/EmLanProto/src/mlan.cpp | 57 ++++++++++------------ protocols/Facebook/src/server.cpp | 14 +++--- protocols/Gadu-Gadu/src/core.cpp | 8 ++-- protocols/Gadu-Gadu/src/image.cpp | 8 ++-- protocols/ICQ-WIM/src/proto.cpp | 4 +- protocols/ICQ-WIM/src/proto.h | 2 +- protocols/ICQ-WIM/src/server.cpp | 73 +++++++++++++---------------- protocols/ICQCorp/src/protocol.cpp | 59 +++++++---------------- protocols/ICQCorp/src/services.cpp | 23 +++------ protocols/IRCG/src/commandmonitor.cpp | 10 ++-- protocols/IRCG/src/irclib.cpp | 8 ++-- protocols/JabberG/src/jabber_ft.cpp | 10 ++-- protocols/JabberG/src/jabber_misc.cpp | 18 +++---- protocols/JabberG/src/jabber_omemo.cpp | 12 ++--- protocols/JabberG/src/jabber_proto.cpp | 4 +- protocols/JabberG/src/jabber_proto.h | 2 +- protocols/JabberG/src/jabber_thread.cpp | 14 +++--- protocols/NewsAggregator/Src/CheckFeed.cpp | 8 ++-- protocols/NewsAggregator/Src/Services.cpp | 2 +- protocols/Sametime/src/messaging.cpp | 9 ++-- protocols/Sametime/src/sametime_proto.cpp | 4 +- protocols/Sametime/src/sametime_proto.h | 2 +- protocols/SkypeWeb/src/skype_contacts.cpp | 11 ++--- protocols/SkypeWeb/src/skype_messages.cpp | 36 ++++++-------- protocols/SkypeWeb/src/skype_proto.cpp | 18 +++---- protocols/SkypeWeb/src/skype_proto.h | 4 +- protocols/Steam/src/steam_contacts.cpp | 10 ++-- protocols/Steam/src/steam_history.cpp | 10 ++-- protocols/Steam/src/steam_proto.cpp | 4 +- protocols/Steam/src/steam_proto.h | 2 +- protocols/Telegram/src/server.cpp | 49 +++++++------------ protocols/Tox/src/tox_contacts.cpp | 10 ++-- protocols/Tox/src/tox_messages.cpp | 12 ++--- protocols/Tox/src/tox_proto.cpp | 4 +- protocols/Tox/src/tox_proto.h | 2 +- protocols/VKontakte/src/vk_chats.cpp | 18 ++++--- protocols/VKontakte/src/vk_feed.cpp | 10 ++-- protocols/VKontakte/src/vk_history.cpp | 16 +++---- protocols/VKontakte/src/vk_messages.cpp | 25 +++++----- protocols/VKontakte/src/vk_pollserver.cpp | 12 ++--- protocols/WhatsApp/src/appsync.cpp | 16 +++---- protocols/WhatsApp/src/message.cpp | 16 +++---- src/core/stdmsg/src/cmdlist.cpp | 2 +- src/core/stdmsg/src/msgs.cpp | 2 +- src/mir_app/src/db_events.cpp | 3 +- src/mir_app/src/mir_app.def | 6 +-- src/mir_app/src/mir_app64.def | 6 +-- src/mir_app/src/proto_chains.cpp | 2 +- src/mir_app/src/proto_interface.cpp | 36 ++++---------- src/mir_app/src/proto_internal.cpp | 12 ++--- src/mir_app/src/protocols.cpp | 16 +++---- 73 files changed, 393 insertions(+), 543 deletions(-) diff --git a/include/delphi/m_protosvc.inc b/include/delphi/m_protosvc.inc index de4c151296..a8650ebfe5 100644 --- a/include/delphi/m_protosvc.inc +++ b/include/delphi/m_protosvc.inc @@ -176,16 +176,6 @@ type // they put there will be retained by anyone trying to save this structure. end; - PPROTORECVEVENT = ^TPROTORECVEVENT; - TPROTORECVEVENT = record - flags : dword; - timestamp : dword; - szMessage : TChar; - lParam : LPARAM; - szUserId : PAnsiChar; // user id of event - szReplyId : PAnsiChar; // reply id of event - end; - const { wParam : PFLAGNUM_* (see above) diff --git a/include/m_protoint.h b/include/m_protoint.h index a3df748937..0bf9f73a62 100644 --- a/include/m_protoint.h +++ b/include/m_protoint.h @@ -217,7 +217,7 @@ public: virtual int Authorize(MEVENT hDbEvent); virtual int AuthDeny(MEVENT hDbEvent, const wchar_t *szReason); - virtual int AuthRecv(MCONTACT hContact, PROTORECVEVENT *); + virtual int AuthRecv(MCONTACT hContact, DB::EventInfo &dbei); virtual int AuthRequest(MCONTACT hContact, const wchar_t *szMessage); virtual HANDLE FileAllow(MCONTACT hContact, HANDLE hTransfer, const wchar_t *szPath); @@ -234,9 +234,9 @@ public: virtual HANDLE SearchAdvanced(MWindow owner); virtual MWindow CreateExtendedSearchUI(MWindow owner); - virtual int RecvContacts(MCONTACT hContact, PROTORECVEVENT *); + virtual int RecvContacts(MCONTACT hContact, DB::EventInfo &dbei); virtual MEVENT RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei); - virtual MEVENT RecvMsg(MCONTACT hContact, PROTORECVEVENT *); + virtual MEVENT RecvMsg(MCONTACT hContact, DB::EventInfo &dbei); virtual int SendContacts(MCONTACT hContact, int flags, int nContacts, MCONTACT *hContactsList); virtual HANDLE SendFile(MCONTACT hContact, const wchar_t *szDescription, wchar_t **ppszFiles); diff --git a/include/m_protosvc.h b/include/m_protosvc.h index a1f1a6a193..64d31b6aa8 100644 --- a/include/m_protosvc.h +++ b/include/m_protosvc.h @@ -666,42 +666,18 @@ struct PROTOFILERESUME // just want to know the final result should hook. // In all cases, the database should store what the user read/wrote. -// An instant message has been received -// wParam = 0 -// lParam = (LPARAM)(PROTORECVEVENT*)&pre -// DB event: EVENTTYPE_MESSAGE, blob contains szMessage without 0 terminator -// Return 0 - success, other failure - -#define PREF_CREATEREAD 1 // create the database event with the 'read' flag set -#define PREF_RTL 4 // 0.5+ addition: support for right-to-left messages -#define PREF_SENT 16 // message will be created with the DBEF_SENT flag -#define PREF_ENCRYPTED 32 // message is encrypted -#define PREF_ENCRYPTED_STRONG 64 // message is encrypted with verified key - -struct PROTORECVEVENT -{ - uint32_t flags; // combination of PREF_* - uint32_t timestamp; // unix time - char* szMessage; // message body in utf8 - LPARAM lParam; // extra space for the network level protocol module - const char* szMsgId; // server message id, optional, should be NULL otherwise - // ignored for protocols without PF4_SERVERMSGID in GetCaps() - const char *szUserId; // user id, for group chats stored in the database - const char *szReplyId; // this message is a reply to a message with that server id -}; - /////////////////////////////////////////////////////////////////////////////// // Proto/RecvMessage -// Copies a message from a PROTORECVEVENT event into the database +// Copies a message from a DB::EventInfo event into the database // wParam = 0 (unused) // lParam = CCSDATA* // Returns the result of db_event_add() #define PSR_MESSAGE "/RecvMessage" -__forceinline INT_PTR ProtoChainRecvMsg(MCONTACT hContact, PROTORECVEVENT *pre) +__forceinline INT_PTR ProtoChainRecvMsg(MCONTACT hContact, const DB::EventInfo &dbei) { - CCSDATA ccs = { hContact, PSR_MESSAGE, 0, (LPARAM)pre }; + CCSDATA ccs = { hContact, PSR_MESSAGE, 0, (LPARAM)&dbei }; return Proto_ChainRecv(0, &ccs); } @@ -715,7 +691,7 @@ __forceinline INT_PTR ProtoChainRecvMsg(MCONTACT hContact, PROTORECVEVENT *pre) #define PSR_AUTH "/RecvAuth" // adds the standard EVENTTYPE_AUTHREQUEST event to the database -EXTERN_C MIR_APP_DLL(MEVENT) Proto_AuthRecv(const char *szProtoName, PROTORECVEVENT *pcre); +EXTERN_C MIR_APP_DLL(MEVENT) Proto_AuthRecv(const char *szProtoName, DB::EventInfo &dbei); /////////////////////////////////////////////////////////////////////////////// // File(s) have been received diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib index 44b1917175..eca65d4159 100644 Binary files a/libs/win32/mir_app.lib and b/libs/win32/mir_app.lib differ diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib index 2054a5d1c6..ce38cff252 100644 Binary files a/libs/win64/mir_app.lib and b/libs/win64/mir_app.lib differ diff --git a/plugins/FileAsMessage/src/main.cpp b/plugins/FileAsMessage/src/main.cpp index 213c64d6de..d19e7c2b37 100644 --- a/plugins/FileAsMessage/src/main.cpp +++ b/plugins/FileAsMessage/src/main.cpp @@ -124,9 +124,9 @@ INT_PTR OnSendFile(WPARAM wParam, LPARAM) INT_PTR OnRecvMessage(WPARAM wParam, LPARAM lParam) { CCSDATA *ccs = (CCSDATA *)lParam; - PROTORECVEVENT *ppre = (PROTORECVEVENT *)ccs->lParam; + auto *dbei = (DB::EventInfo*)ccs->lParam; - if (strncmp(ppre->szMessage, szServicePrefix, mir_strlen(szServicePrefix))) + if (strncmp(dbei->pBlob, szServicePrefix, mir_strlen(szServicePrefix))) return Proto_ChainRecv(wParam, ccs); HWND hwnd = WindowList_Find(hFileList, ccs->hContact); @@ -142,7 +142,7 @@ INT_PTR OnRecvMessage(WPARAM wParam, LPARAM lParam) return 0; } } - char *msg = mir_strdup(ppre->szMessage + mir_strlen(szServicePrefix)); + char *msg = mir_strdup(dbei->pBlob + mir_strlen(szServicePrefix)); PostMessage(hwnd, WM_FE_MESSAGE, (WPARAM)ccs->hContact, (LPARAM)msg); return 0; diff --git a/plugins/Jingle/src/account.cpp b/plugins/Jingle/src/account.cpp index b2be77922b..9a334942e1 100644 --- a/plugins/Jingle/src/account.cpp +++ b/plugins/Jingle/src/account.cpp @@ -127,10 +127,10 @@ static BOOL OnProcessJingle(struct IJabberInterface *api, const TiXmlElement *no } // Save this event to history - PROTORECVEVENT recv = {}; - recv.timestamp = (uint32_t)time(0); - recv.szMessage = "** A call while we were busy **"; - ProtoChainRecvMsg(api->ContactFromJID(from), &recv); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)time(0); + dbei.pBlob = "** A call while we were busy **"; + ProtoChainRecvMsg(api->ContactFromJID(from), dbei); reason = "busy"; } diff --git a/plugins/MirLua/src/Modules/m_protocols.cpp b/plugins/MirLua/src/Modules/m_protocols.cpp index a34f262780..32c8e34590 100644 --- a/plugins/MirLua/src/Modules/m_protocols.cpp +++ b/plugins/MirLua/src/Modules/m_protocols.cpp @@ -299,10 +299,5 @@ LUAMOD_API int luaopen_m_protocols(lua_State *L) .Field(&CCSDATA::lParam, "lParam", LUA_TLIGHTUSERDATA) .Field(&CCSDATA::lParam, "Message", LUA_TSTRING); - MT(L, "PROTORECVEVENT") - .Field(&PROTORECVEVENT::timestamp, "Timestamp", LUA_TINTEGER) - .Field(&PROTORECVEVENT::flags, "Flags", LUA_TINTEGER) - .Field(&PROTORECVEVENT::szMessage, "Message", LUA_TSTRING); - return 1; } diff --git a/plugins/MirOTR/src/svcs_proto.cpp b/plugins/MirOTR/src/svcs_proto.cpp index 038500363b..38f1bb401c 100644 --- a/plugins/MirOTR/src/svcs_proto.cpp +++ b/plugins/MirOTR/src/svcs_proto.cpp @@ -76,13 +76,13 @@ INT_PTR SVC_OTRSendMessage(WPARAM wParam,LPARAM lParam){ INT_PTR SVC_OTRRecvMessage(WPARAM wParam,LPARAM lParam) { CCSDATA *ccs = (CCSDATA *) lParam; - PROTORECVEVENT *pre = (PROTORECVEVENT *) ccs->lParam; + auto *dbei = (DB::EventInfo *) ccs->lParam; DEBUGOUTA("OTR - receiving message: '"); - DEBUGOUTA(pre->szMessage); + DEBUGOUTA(dbei->pBlob); DEBUGOUTA("'\n"); - if (pre->flags & PREF_BYPASS_OTR) // bypass for our inline messages + if (dbei->flags & PREF_BYPASS_OTR) // bypass for our inline messages return Proto_ChainRecv(wParam, ccs); char *proto = Proto_GetBaseAccountName(ccs->hContact); @@ -91,7 +91,7 @@ INT_PTR SVC_OTRRecvMessage(WPARAM wParam,LPARAM lParam) else if(proto && mir_strcmp(proto, META_PROTO) == 0) // bypass for metacontacts return Proto_ChainRecv(wParam, ccs); - char *oldmessage = pre->szMessage; + char *oldmessage = dbei->pBlob; // convert oldmessage to utf-8 if (!oldmessage) return 1; @@ -125,7 +125,7 @@ INT_PTR SVC_OTRRecvMessage(WPARAM wParam,LPARAM lParam) if (newmessage == nullptr) return Proto_ChainRecv(wParam, ccs); - uint32_t oldflags = pre->flags; + uint32_t oldflags = dbei->flags; typedef void (*msg_free_t)(void*); msg_free_t msg_free = (msg_free_t)otrl_message_free; @@ -142,11 +142,11 @@ INT_PTR SVC_OTRRecvMessage(WPARAM wParam,LPARAM lParam) replaceStr(newmessage, tmp.Detach()); msg_free = mir_free; } - pre->szMessage = newmessage; + dbei->pBlob = newmessage; BOOL ret = Proto_ChainRecv(wParam, ccs); /// @todo (White-Tiger#1#03/23/15): why are we doing this? - pre->flags = oldflags; - pre->szMessage = oldmessage; + dbei->flags = oldflags; + dbei->pBlob = oldmessage; msg_free(newmessage); return ret; } diff --git a/plugins/MirOTR/src/utils.cpp b/plugins/MirOTR/src/utils.cpp index 76b4d03c96..af6c8eb928 100644 --- a/plugins/MirOTR/src/utils.cpp +++ b/plugins/MirOTR/src/utils.cpp @@ -215,11 +215,11 @@ void ShowMessageInline(const MCONTACT hContact, const wchar_t *msg) mir_snwprintf(buff, L"%s%s", _A2W(LANG_INLINE_PREFIX), msg); T2Utf utf(buff); - PROTORECVEVENT pre = { 0 }; - pre.timestamp = time(0); - pre.szMessage = utf; - pre.flags = PREF_BYPASS_OTR; - ProtoChainRecvMsg(hContact, &pre); + DB::EventInfo dbei; + dbei.timestamp = time(0); + dbei.pBlob = utf; + dbei.flags = PREF_BYPASS_OTR; + ProtoChainRecvMsg(hContact, dbei); } void ShowMessageInlineUtf(const MCONTACT hContact, const char *msg) @@ -227,11 +227,11 @@ void ShowMessageInlineUtf(const MCONTACT hContact, const char *msg) char buff[1024]; mir_snprintf(buff, "%s%s", LANG_INLINE_PREFIX, msg); - PROTORECVEVENT pre = { 0 }; - pre.timestamp = time(0); - pre.szMessage = buff; - pre.flags = PREF_BYPASS_OTR; - ProtoChainRecvMsg(hContact, &pre); + DB::EventInfo dbei; + dbei.timestamp = time(0); + dbei.pBlob = buff; + dbei.flags = PREF_BYPASS_OTR; + ProtoChainRecvMsg(hContact, dbei); } void ShowMessageUtf(const MCONTACT hContact, const char *msg) diff --git a/plugins/New_GPG/src/messages.cpp b/plugins/New_GPG/src/messages.cpp index c9c89bf0f3..b3bd5e286c 100644 --- a/plugins/New_GPG/src/messages.cpp +++ b/plugins/New_GPG/src/messages.cpp @@ -299,11 +299,11 @@ INT_PTR RecvMsgSvc(WPARAM w, LPARAM l) if (!ccs) return Proto_ChainRecv(w, ccs); - PROTORECVEVENT *pre = (PROTORECVEVENT*)(ccs->lParam); - if (!pre) + auto *dbei = (DB::EventInfo*)(ccs->lParam); + if (!dbei) return Proto_ChainRecv(w, ccs); - char *msg = pre->szMessage; + char *msg = dbei->pBlob; if (!msg) return Proto_ChainRecv(w, ccs); @@ -497,7 +497,7 @@ INT_PTR RecvMsgSvc(WPARAM w, LPARAM l) if (!strstr(msg, "-----BEGIN PGP MESSAGE-----")) return Proto_ChainRecv(w, ccs); - mir_forkThread(RecvMsgSvc_func, new RecvParams(ccs->hContact, str, msg, pre->timestamp)); + mir_forkThread(RecvMsgSvc_func, new RecvParams(ccs->hContact, str, msg, dbei->timestamp)); return 0; } diff --git a/plugins/Scriver/src/globals.cpp b/plugins/Scriver/src/globals.cpp index 23bbc7af31..6ec8c203bd 100644 --- a/plugins/Scriver/src/globals.cpp +++ b/plugins/Scriver/src/globals.cpp @@ -127,7 +127,7 @@ static int ackevent(WPARAM, LPARAM lParam) DBEVENTINFO dbei = {}; dbei.eventType = EVENTTYPE_MESSAGE; - dbei.flags = DBEF_UTF | DBEF_SENT | ((item->flags & PREF_RTL) ? DBEF_RTL : 0); + dbei.flags = DBEF_UTF | DBEF_SENT | (item->flags & DBEF_RTL); dbei.szModule = Proto_GetBaseAccountName(hContact); dbei.timestamp = time(0); dbei.cbBlob = (int)mir_strlen(item->sendBuffer) + 1; diff --git a/plugins/Scriver/src/msgdialog.cpp b/plugins/Scriver/src/msgdialog.cpp index 0ab0d77f11..b75ab78c42 100644 --- a/plugins/Scriver/src/msgdialog.cpp +++ b/plugins/Scriver/src/msgdialog.cpp @@ -298,7 +298,7 @@ void CMsgDialog::onClick_Ok(CCtrlButton *pButton) SendQueue::Item msi = {}; if (pf2.wEffects & PFE_RTLPARA) - msi.flags |= PREF_RTL; + msi.flags |= DBEF_RTL; msi.sendBuffer = m_message.GetRichTextRtf(true); msi.sendBufferSize = (int)mir_strlen(msi.sendBuffer); @@ -306,7 +306,7 @@ void CMsgDialog::onClick_Ok(CCtrlButton *pButton) return; if (Utils_IsRtl(ptrW(mir_utf8decodeW(msi.sendBuffer)))) - msi.flags |= PREF_RTL; + msi.flags |= DBEF_RTL; // Store messaging history TCmdList *cmdListNew = tcmdlist_last(cmdList); diff --git a/plugins/SecureIM/src/crypt_dll.cpp b/plugins/SecureIM/src/crypt_dll.cpp index dbf655111f..c23663cd19 100644 --- a/plugins/SecureIM/src/crypt_dll.cpp +++ b/plugins/SecureIM/src/crypt_dll.cpp @@ -129,7 +129,7 @@ LPSTR encodeMsg(pUinKey ptr, LPARAM lParam) LPSTR decodeMsg(pUinKey ptr, LPARAM lParam, LPSTR szEncMsg) { CCSDATA *pccsd = (CCSDATA *)lParam; - PROTORECVEVENT *ppre = (PROTORECVEVENT *)pccsd->lParam; + auto *dbei = (DB::EventInfo *)pccsd->lParam; LPSTR szNewMsg = nullptr; LPSTR szOldMsg = cpp_decodeU(ptr->cntx, szEncMsg); @@ -155,7 +155,7 @@ LPSTR decodeMsg(pUinKey ptr, LPARAM lParam, LPSTR szEncMsg) szNewMsg = (LPSTR)mir_alloc(olen); memcpy(szNewMsg, szOldMsg, olen); } - ppre->szMessage = szNewMsg; + dbei->pBlob = szNewMsg; return szNewMsg; } diff --git a/plugins/SecureIM/src/svcs_proto.cpp b/plugins/SecureIM/src/svcs_proto.cpp index d1079c8276..98ae3ae07d 100644 --- a/plugins/SecureIM/src/svcs_proto.cpp +++ b/plugins/SecureIM/src/svcs_proto.cpp @@ -66,13 +66,13 @@ LPSTR szUnrtfMsg = nullptr; INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) { CCSDATA *ccs = (CCSDATA *)lParam; - PROTORECVEVENT *ppre = (PROTORECVEVENT *)ccs->lParam; + auto *dbei = (DB::EventInfo *)ccs->lParam; pUinKey ptr = getUinKey(ccs->hContact); - LPSTR szEncMsg = ppre->szMessage, szPlainMsg = nullptr; + LPSTR szEncMsg = dbei->pBlob, szPlainMsg = nullptr; Sent_NetLog("onRecvMsg: %s", szEncMsg); - int ssig = getSecureSig(ppre->szMessage, &szEncMsg); + int ssig = getSecureSig(dbei->pBlob, &szEncMsg); bool bSecured = (isContactSecured(ccs->hContact)&SECURED) != 0; bool bPGP = isContactPGP(ccs->hContact); bool bGPG = isContactGPG(ccs->hContact); @@ -96,7 +96,7 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) Sent_NetLog("onRecvMsg: non-secure message"); ptrA szPlainMsg(m_aastrcat(Translate("SecureIM received unencrypted message:\n"), szEncMsg)); - ppre->szMessage = szPlainMsg; + dbei->pBlob = szPlainMsg; ccs->wParam |= PREF_SIMNOMETA; return Proto_ChainRecv(wParam, ccs); } @@ -131,7 +131,7 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) mir_strcpy(tmp, ptr->msgSplitted); mir_strcat(tmp, szEncMsg); mir_free(ptr->msgSplitted); - ptr->msgSplitted = szEncMsg = ppre->szMessage = tmp; + ptr->msgSplitted = szEncMsg = dbei->pBlob = tmp; ssig = getSecureSig(tmp, &szEncMsg); } else SAFE_FREE(ptr->msgSplitted); @@ -140,7 +140,7 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) if (ssig == SiG_SECP || ssig == SiG_PART) { LPSTR msg = combineMessage(ptr, szEncMsg); if (!msg) return 1; - szEncMsg = ppre->szMessage = msg; + szEncMsg = dbei->pBlob = msg; ssig = getSecureSig(msg, &szEncMsg); } @@ -148,7 +148,7 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) if (ssig == SiG_PGPM && ((bPGPloaded && (bPGPkeyrings || bPGPprivkey)) || (bGPGloaded && bGPGkeyrings))) { Sent_NetLog("onRecvMsg: PGP/GPG message"); - szEncMsg = ppre->szMessage; + szEncMsg = dbei->pBlob; if (!ptr->cntx) { ptr->cntx = cpp_create_context(((bGPGloaded && bGPGkeyrings) ? CPP_MODE_GPG : CPP_MODE_PGP) | ((db_get_b(ccs->hContact, MODULENAME, "gpgANSI", 0)) ? CPP_MODE_GPG_ANSI : 0)); ptr->keyLoaded = 0; @@ -169,7 +169,7 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) if (!szOldMsg) { // error while decrypting message, send error SAFE_FREE(ptr->msgSplitted); - ppre->szMessage = Translate("SecureIM: Sorry, unable to decrypt this message because you have no PGP/GPG installed. Visit www.pgp.com or www.gnupg.org for more info."); + dbei->pBlob = Translate("SecureIM: Sorry, unable to decrypt this message because you have no PGP/GPG installed. Visit www.pgp.com or www.gnupg.org for more info."); return Proto_ChainRecv(wParam, ccs); } @@ -178,9 +178,9 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) szNewMsg = m_ustrcat(Translate("SecureIM received encrypted message:\n"), szOldMsg); szOldMsg = szNewMsg; } - ptrA szMsgUtf(utf8_to_miranda(szOldMsg, ppre->flags)); - ccs->wParam = ppre->flags; - ppre->szMessage = szMsgUtf; + ptrA szMsgUtf(utf8_to_miranda(szOldMsg, dbei->flags)); + ccs->wParam = dbei->flags; + dbei->pBlob = szMsgUtf; // show decoded message showPopupRM(ptr->hContact); @@ -213,9 +213,9 @@ INT_PTR __cdecl onRecvMsg(WPARAM wParam, LPARAM lParam) if (!szOldMsg) return 1; // don't display it ... - ptrA szNewMsg(utf8_to_miranda(szOldMsg, ppre->flags)); - ccs->wParam = ppre->flags; - ppre->szMessage = szNewMsg; + ptrA szNewMsg(utf8_to_miranda(szOldMsg, dbei->flags)); + ccs->wParam = dbei->flags; + dbei->pBlob = szNewMsg; // show decoded message showPopupRM(ptr->hContact); diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index f4bf62111c..172bb9fef5 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -849,7 +849,7 @@ void CMsgDialog::onClick_Ok(CCtrlButton *) int flags = 0; if (pf2.wEffects & PFE_RTLPARA) if (Utils_IsRtl(decoded)) - flags |= PREF_RTL; + flags |= DBEF_RTL; SendMessage(hwndEdit, WM_SETREDRAW, TRUE, 0); SendMessage(hwndEdit, EM_SETSEL, -1, -1); diff --git a/plugins/TabSRMM/src/sendqueue.cpp b/plugins/TabSRMM/src/sendqueue.cpp index 824cbe3017..e009e98496 100644 --- a/plugins/TabSRMM/src/sendqueue.cpp +++ b/plugins/TabSRMM/src/sendqueue.cpp @@ -471,7 +471,7 @@ int SendQueue::ackMessage(CMsgDialog *dat, WPARAM wParam, LPARAM lParam) cc->updateStats(TSessionStats::BYTES_SENT, dbei.cbBlob - 1); } - if (job.dwFlags & PREF_RTL) + if (job.dwFlags & DBEF_RTL) dbei.flags |= DBEF_RTL; dbei.pBlob = job.szSendBuffer; dbei.szId = (char *)ack->lParam; diff --git a/plugins/Watrack/proto/proto.pas b/plugins/Watrack/proto/proto.pas index c37c19bb68..d6b202b529 100644 --- a/plugins/Watrack/proto/proto.pas +++ b/plugins/Watrack/proto/proto.pas @@ -84,6 +84,7 @@ const var ccs:PCCSDATA; ccdata:TCCSDATA; + dbei:PDBEVENTINFO; s:pWideChar; buf:PWideChar; data:PByte; @@ -102,12 +103,11 @@ begin result:=0; mGetMem(buf,bufsize); - isNewRequest:=StrCmp(PPROTORECVEVENT(ccs^.lParam)^.szMessage.a, - wpRequestNew,Length(wpRequestNew))=0; + dbei:=PDBEVENTINFO(ccs^.lParam); + isNewRequest:=StrCmp(PAnsiChar(dbei.pBlob),wpRequestNew,Length(wpRequestNew))=0; if isNewRequest or - (StrCmp(PPROTORECVEVENT(ccs^.lParam)^.szMessage.a, - wpRequest,Length(wpRequest))=0) then + (StrCmp(PAnsiChar(dbei.pBlob),wpRequest,Length(wpRequest))=0) then begin StrCopy(PAnsiChar(buf),Proto_GetBaseAccountName(ccs^.hContact)); i:=DBReadWord(ccs^.hContact,PAnsiChar(buf),'ApparentMode'); @@ -120,8 +120,7 @@ begin // or (NotListedAllow and (DBReadByte(ccs^.hContact,strCList,'NotOnList',0)) begin if (HistMask and hmInRequest)<>0 then - AddEvent(ccs^.hContact,EVENTTYPE_WAT_REQUEST,DBEF_READ,nil,0, - PPROTORECVEVENT(ccs^.lParam)^.Timestamp); + AddEvent(ccs^.hContact,EVENTTYPE_WAT_REQUEST,DBEF_READ,nil,0,dbei.Timestamp); if GetContactStatus(ccs^.hContact)<>ID_STATUS_OFFLINE then begin //!! Request Answer @@ -204,8 +203,7 @@ begin else begin if (HistMask and hmIRequest)<>0 then - AddEvent(ccs^.hContact,EVENTTYPE_WAT_REQUEST,DBEF_READ,nil,0, - PPROTORECVEVENT(ccs^.lParam)^.Timestamp); + AddEvent(ccs^.hContact,EVENTTYPE_WAT_REQUEST,DBEF_READ,nil,0,dbei.Timestamp); if (HistMask and hmISend)<>0 then begin //!! Request Error Answer @@ -224,16 +222,15 @@ begin Proto_ChainSend(0, @ccdata); if (HistMask and hmOutError)<>0 then begin - AddEvent(ccs^.hContact,EVENTTYPE_WAT_ERROR,DBEF_SENT,nil,0, - PPROTORECVEVENT(ccs^.lParam)^.Timestamp); + AddEvent(ccs^.hContact,EVENTTYPE_WAT_ERROR,DBEF_SENT,nil,0,dbei.Timestamp); end; end; end; end - else if StrCmp(PPROTORECVEVENT(ccs^.lParam)^.szMessage.a,wpAnswer,Length(wpAnswer))=0 then + else if StrCmp(PAnsiChar(dbei.pBlob),wpAnswer,Length(wpAnswer))=0 then begin // decode - data:=mir_base64_decode(PPROTORECVEVENT(ccs^.lParam)^.szMessage.a+Length(wpAnswer),dataSize); + data:=mir_base64_decode(PAnsiChar(dbei.pBlob)+Length(wpAnswer),dataSize); curpos:=pWideChar(data); // pos_artist:=curpos; while curpos^<>#0 do inc(curpos); inc(curpos); // pos_title :=curpos; @@ -242,9 +239,7 @@ begin pos_template:=curpos; if (HistMask and hmInInfo)<>0 then - AddEvent(ccs^.hContact,EVENTTYPE_WAT_ANSWER,DBEF_READ, - data,dataSize, - PPROTORECVEVENT(ccs^.lParam)^.Timestamp); + AddEvent(ccs^.hContact,EVENTTYPE_WAT_ANSWER,DBEF_READ,data,dataSize,dbei.Timestamp); // Action StrCopyW(buf,TranslateW('Music Info from ')); @@ -254,12 +249,11 @@ begin mFreeMem(data); end - else if StrCmp(PPROTORECVEVENT(ccs^.lParam)^.szMessage.a,wpError,Length(wpError))=0 then + else if StrCmp(PAnsiChar(dbei.pBlob),wpError,Length(wpError))=0 then begin if (HistMask and hmInError)<>0 then - AddEvent(ccs^.hContact,EVENTTYPE_WAT_ERROR,DBEF_READ,nil,0, - PPROTORECVEVENT(ccs^.lParam)^.Timestamp); - MessageBoxA(0,Translate(PPROTORECVEVENT(ccs^.lParam)^.szMessage.a+Length(wpError)), + AddEvent(ccs^.hContact,EVENTTYPE_WAT_ERROR,DBEF_READ,nil,0,dbei.Timestamp); + MessageBoxA(0,Translate(PAnsiChar(dbei.pBlob)+Length(wpError)), Translate('You Get Error'),MB_ICONERROR); end else diff --git a/protocols/Discord/src/dispatch.cpp b/protocols/Discord/src/dispatch.cpp index 536eff688f..0c6062f1d5 100644 --- a/protocols/Discord/src/dispatch.cpp +++ b/protocols/Discord/src/dispatch.cpp @@ -408,23 +408,23 @@ void CDiscordProto::OnCommandMessage(const JSONNode &pRoot, bool bIsNew) wszText.AppendFormat(L" (%s %s)", TranslateT("edited at"), edited.as_mstring().c_str()); // if a message has myself as an author, add some flags - PROTORECVEVENT recv = {}; + DB::EventInfo dbei; if (bOurMessage) - recv.flags = PREF_CREATEREAD | PREF_SENT; + dbei.flags = DBEF_READ | DBEF_SENT; debugLogA("store a message from private user %lld, channel id %lld", pUser->id, pUser->channelId); ptrA buf(mir_utf8encodeW(wszText)); - recv.timestamp = (uint32_t)StringToDate(pRoot["timestamp"].as_mstring()); - recv.szMessage = buf; - recv.szMsgId = szMsgId; + dbei.timestamp = (uint32_t)StringToDate(pRoot["timestamp"].as_mstring()); + dbei.pBlob = buf; + dbei.szId = szMsgId; if (!pUser->bIsPrivate || pUser->bIsGroup) { - recv.szUserId = szUserId; + dbei.szUserId = szUserId; ProcessChatUser(pUser, userId, pRoot); } - ProtoChainRecvMsg(pUser->hContact, &recv); + ProtoChainRecvMsg(pUser->hContact, dbei); } pUser->lastMsgId = msgId; diff --git a/protocols/Discord/src/proto.cpp b/protocols/Discord/src/proto.cpp index e2f0658819..00c7daf351 100644 --- a/protocols/Discord/src/proto.cpp +++ b/protocols/Discord/src/proto.cpp @@ -369,9 +369,9 @@ int CDiscordProto::AuthRequest(MCONTACT hContact, const wchar_t*) return 0; } -int CDiscordProto::AuthRecv(MCONTACT, PROTORECVEVENT *pre) +int CDiscordProto::AuthRecv(MCONTACT, DB::EventInfo &dbei) { - return Proto_AuthRecv(m_szModuleName, pre); + return Proto_AuthRecv(m_szModuleName, dbei); } int CDiscordProto::Authorize(MEVENT hDbEvent) diff --git a/protocols/Discord/src/proto.h b/protocols/Discord/src/proto.h index 1bc7c04444..4c9f74e181 100644 --- a/protocols/Discord/src/proto.h +++ b/protocols/Discord/src/proto.h @@ -427,7 +427,7 @@ public: MCONTACT AddToList(int flags, PROTOSEARCHRESULT *psr) override; MCONTACT AddToListByEvent(int flags, int, MEVENT hDbEvent) override; - int AuthRecv(MCONTACT, PROTORECVEVENT *pre) override; + int AuthRecv(MCONTACT, DB::EventInfo &dbei) override; int Authorize(MEVENT hDbEvent) override; int AuthDeny(MEVENT hDbEvent, const wchar_t* szReason) override; int AuthRequest(MCONTACT hContact, const wchar_t*) override; diff --git a/protocols/Discord/src/utils.cpp b/protocols/Discord/src/utils.cpp index cc2e4fff3a..dcd94ebe71 100644 --- a/protocols/Discord/src/utils.cpp +++ b/protocols/Discord/src/utils.cpp @@ -334,11 +334,11 @@ void CDiscordProto::ProcessType(CDiscordUser *pUser, const JSONNode &pRoot) CMStringA szId(FORMAT, "%lld", pUser->id); DB::AUTH_BLOB blob(pUser->hContact, T2Utf(pUser->wszUsername), nullptr, nullptr, szId, nullptr); - PROTORECVEVENT pre = {}; - pre.timestamp = (uint32_t)time(0); - pre.lParam = blob.size(); - pre.szMessage = blob; - ProtoChainRecv(pUser->hContact, PSR_AUTH, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)time(0); + dbei.cbBlob = blob.size(); + dbei.pBlob = blob; + ProtoChainRecv(pUser->hContact, PSR_AUTH, 0, (LPARAM)&dbei); } break; } diff --git a/protocols/EmLanProto/src/mlan.cpp b/protocols/EmLanProto/src/mlan.cpp index a1c764d125..662df2d566 100644 --- a/protocols/EmLanProto/src/mlan.cpp +++ b/protocols/EmLanProto/src/mlan.cpp @@ -266,10 +266,10 @@ void CMLan::OnRecvPacket(u_char *mes, int len, in_addr from) if (!cont) RequestStatus(true, from.S_un.S_addr); else { - PROTORECVEVENT pre = { 0 }; - pre.timestamp = get_time(); - pre.szMessage = pak.strMessage; - ProtoChainRecv(FindContact(cont->m_addr, cont->m_nick, true, false, false, cont->m_status), PSR_MESSAGE, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = get_time(); + dbei.pBlob = pak.strMessage; + ProtoChainRecvMsg(FindContact(cont->m_addr, cont->m_nick, true, false, false, cont->m_status), dbei); TPacket npak; memset(&npak, 0, sizeof(npak)); @@ -285,11 +285,11 @@ void CMLan::OnRecvPacket(u_char *mes, int len, in_addr from) } if (pak.strAwayMessage && cont) { - PROTORECVEVENT pre = { 0 }; - pre.timestamp = get_time(); - pre.szMessage = pak.strAwayMessage; - pre.lParam = pak.idAckAwayMessage; - ProtoChainRecv(FindContact(cont->m_addr, cont->m_nick, true, false, false, cont->m_status), PSR_AWAYMSG, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = get_time(); + dbei.pBlob = pak.strAwayMessage; + dbei.cbBlob = pak.idAckAwayMessage; + ProtoChainRecv(FindContact(cont->m_addr, cont->m_nick, true, false, false, cont->m_status), PSR_AWAYMSG, 0, (LPARAM)&dbei); } if (pak.idReqAwayMessage && cont) { @@ -320,16 +320,14 @@ void CMLan::RecvMessageUrl(CCSDATA *ccs) { Contact::Hide(ccs->hContact, false); - PROTORECVEVENT *pre = (PROTORECVEVENT*)ccs->lParam; - ptrA szMessage(mir_utf8encode(pre->szMessage)); + DB::EventInfo &dbei = *(DB::EventInfo *)ccs->lParam; + ptrA szMsg(mir_utf8encode(dbei.pBlob)); - DBEVENTINFO dbei = {}; dbei.eventType = EVENTTYPE_MESSAGE; dbei.szModule = MODULENAME; - dbei.timestamp = pre->timestamp; - dbei.flags = DBEF_UTF + ((pre->flags & PREF_CREATEREAD) ? DBEF_READ : 0); - dbei.cbBlob = (uint32_t)mir_strlen(szMessage) + 1; - dbei.pBlob = szMessage.get(); + dbei.flags |= DBEF_UTF; + dbei.cbBlob = (uint32_t)mir_strlen(szMsg) + 1; + dbei.pBlob = szMsg; db_event_add(ccs->hContact, &dbei); } @@ -375,8 +373,8 @@ int CMLan::GetAwayMsg(CCSDATA *ccs) int CMLan::RecvAwayMsg(CCSDATA *ccs) { - PROTORECVEVENT *pre = (PROTORECVEVENT*)ccs->lParam; - ProtoBroadcastAck(MODULENAME, ccs->hContact, ACKTYPE_AWAYMSG, ACKRESULT_SUCCESS, (HANDLE)pre->lParam, (LPARAM)pre->szMessage); + auto *pre = (DB::EventInfo *)ccs->lParam; + ProtoBroadcastAck(MODULENAME, ccs->hContact, ACKTYPE_AWAYMSG, ACKRESULT_SUCCESS, (HANDLE)pre->cbBlob, (LPARAM)pre->pBlob); return 0; } @@ -900,17 +898,14 @@ void CMLan::FileRemoveFromList(TFileConnection *conn) void CMLan::RecvFile(CCSDATA *ccs) { - PROTORECVEVENT *pre = (PROTORECVEVENT *)ccs->lParam; + auto &dbei = *(DB::EventInfo *)ccs->lParam; Contact::Hide(ccs->hContact, false); - char *szFile = pre->szMessage + sizeof(uint32_t); + char *szFile = dbei.pBlob + sizeof(uint32_t); char *szDesc = szFile + mir_strlen(szFile) + 1; - DB::EventInfo dbei; dbei.szModule = MODULENAME; - dbei.timestamp = pre->timestamp; - dbei.flags = pre->flags & (PREF_CREATEREAD ? DBEF_READ : 0); dbei.eventType = EVENTTYPE_FILE; DB::FILE_BLOB(_A2T(szFile), _A2T(szDesc)).write(dbei); db_event_add(ccs->hContact, &dbei); @@ -946,10 +941,10 @@ void CMLan::OnInTCPConnection(u_long addr, SOCKET in_sock) int rcTotalSize = *((int*)(conn->m_buf + 1)); int rcTotalFiles = *((int*)(conn->m_buf + 1 + 4)); - PROTORECVEVENT pre; - pre.szMessage = new char[conn->m_recSize + rcTotalFiles]; - *((int*)pre.szMessage) = conn->m_cid; - char* pf_to = pre.szMessage + 4; + DB::EventInfo dbei; + dbei.pBlob = (char*)mir_alloc(conn->m_recSize + rcTotalFiles); + *((int*)dbei.pBlob) = conn->m_cid; + char* pf_to = dbei.pBlob + 4; char* pf_fr = (char*)conn->m_buf + 1 + 4 + 4; conn->m_szFiles = new wchar_t*[rcTotalFiles + 1]; @@ -971,12 +966,8 @@ void CMLan::OnInTCPConnection(u_long addr, SOCKET in_sock) *pf_to++ = *pf_fr++; conn->m_hContact = FindContact(cont->m_addr, cont->m_nick, true, false, false, cont->m_status); - pre.flags = 0; - pre.timestamp = get_time(); - pre.lParam = 0; - ProtoChainRecv(conn->m_hContact, PSR_FILE, 0, (LPARAM)&pre); - - delete[] pre.szMessage; + dbei.timestamp = get_time(); + ProtoChainRecv(conn->m_hContact, PSR_FILE, 0, (LPARAM)&dbei); while (!conn->m_state) Sleep(10); diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index 14f71fc032..63f6f9d09a 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -844,15 +844,15 @@ void FacebookProto::OnPublishPrivateMessage(const JSONNode &root) // if that's a group chat, send it to the room auto szActorFbId(metadata["actorFbId"].as_string()); - PROTORECVEVENT pre = {}; - pre.timestamp = uint32_t(_wtoi64(metadata["timestamp"].as_mstring()) / 1000); - pre.szMessage = (char *)szBody.c_str(); - pre.szMsgId = (char *)szId.c_str(); + DB::EventInfo dbei; + dbei.timestamp = uint32_t(_wtoi64(metadata["timestamp"].as_mstring()) / 1000); + dbei.pBlob = (char *)szBody.c_str(); + dbei.szId = (char *)szId.c_str(); if (m_uid == _atoi64(szActorFbId.c_str())) - pre.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; if (pUser->bIsChat) - pre.szUserId = szActorFbId.c_str(); - ProtoChainRecvMsg(pUser->hContact, &pre); + dbei.szUserId = szActorFbId.c_str(); + ProtoChainRecvMsg(pUser->hContact, dbei); } // changing thread name diff --git a/protocols/Gadu-Gadu/src/core.cpp b/protocols/Gadu-Gadu/src/core.cpp index e7ed33b01b..6a84c1b251 100644 --- a/protocols/Gadu-Gadu/src/core.cpp +++ b/protocols/Gadu-Gadu/src/core.cpp @@ -822,11 +822,11 @@ retry: } // Check if not empty message ( who needs it? ) else if (!e->event.msg.recipients_count && e->event.msg.message && *e->event.msg.message && mir_strcmp(e->event.msg.message, "\xA0\0")) { - PROTORECVEVENT pre = {}; + DB::EventInfo dbei; time_t t = time(0); - pre.timestamp = (!(e->event.msg.msgclass & GG_CLASS_OFFLINE) || e->event.msg.time > (t - timeDeviation)) ? t : e->event.msg.time; - pre.szMessage = e->event.msg.message; - ProtoChainRecvMsg(getcontact(e->event.msg.sender, 1, 0, nullptr), &pre); + dbei.timestamp = (!(e->event.msg.msgclass & GG_CLASS_OFFLINE) || e->event.msg.time > (t - timeDeviation)) ? t : e->event.msg.time; + dbei.pBlob = e->event.msg.message; + ProtoChainRecvMsg(getcontact(e->event.msg.sender, 1, 0, nullptr), dbei); } // RichEdit format included (image) diff --git a/protocols/Gadu-Gadu/src/image.cpp b/protocols/Gadu-Gadu/src/image.cpp index 595151e1ed..79ffd36e22 100644 --- a/protocols/Gadu-Gadu/src/image.cpp +++ b/protocols/Gadu-Gadu/src/image.cpp @@ -866,10 +866,10 @@ int GaduProto::img_displayasmsg(MCONTACT hContact, void *img) mir_snwprintf(image_msg, L"[img]%s[/img]", szPath); T2Utf szMessage(image_msg); - PROTORECVEVENT pre = {}; - pre.timestamp = time(0); - pre.szMessage = szMessage; - ProtoChainRecvMsg(hContact, &pre); + DB::EventInfo dbei; + dbei.timestamp = time(0); + dbei.pBlob = szMessage; + ProtoChainRecvMsg(hContact, dbei); debugLogW(L"img_displayasmsg(): Image saved to %s.", szPath); } else diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp index ffefe1846c..48f94f5714 100644 --- a/protocols/ICQ-WIM/src/proto.cpp +++ b/protocols/ICQ-WIM/src/proto.cpp @@ -467,9 +467,9 @@ MCONTACT CIcqProto::AddToList(int, PROTOSEARCHRESULT *psr) //////////////////////////////////////////////////////////////////////////////////////// // PSR_AUTH -int CIcqProto::AuthRecv(MCONTACT, PROTORECVEVENT *pre) +int CIcqProto::AuthRecv(MCONTACT, DB::EventInfo &dbei) { - return Proto_AuthRecv(m_szModuleName, pre); + return Proto_AuthRecv(m_szModuleName, dbei); } //////////////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index eb363bffd5..7fe31a13e0 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -425,7 +425,7 @@ class CIcqProto : public PROTO MCONTACT AddToList( int flags, PROTOSEARCHRESULT *psr) override; - int AuthRecv(MCONTACT, PROTORECVEVENT *pre) override; + int AuthRecv(MCONTACT, DB::EventInfo &dbei) override; int AuthRequest(MCONTACT hContact, const wchar_t *szMessage) override; INT_PTR GetCaps(int type, MCONTACT hContact = NULL) override; diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp index ae12f8de57..d86c76cfc5 100644 --- a/protocols/ICQ-WIM/src/server.cpp +++ b/protocols/ICQ-WIM/src/server.cpp @@ -87,13 +87,13 @@ MCONTACT CIcqProto::CheckOwnMessage(const CMStringA &reqId, const CMStringA &msg else { T2Utf szOwnId(m_szOwnId); - PROTORECVEVENT pre = {}; - pre.szMsgId = msgId.c_str(); - pre.timestamp = time(0); - pre.szMessage = pOwn->m_szText; - pre.flags = PREF_SENT | PREF_CREATEREAD; - pre.szUserId = szOwnId; - ProtoChainRecvMsg(pOwn->m_hContact, &pre); + DB::EventInfo dbei; + dbei.szId = msgId.c_str(); + dbei.timestamp = time(0); + dbei.pBlob = pOwn->m_szText; + dbei.flags = DBEF_SENT | DBEF_READ; + dbei.szUserId = szOwnId; + ProtoChainRecvMsg(pOwn->m_hContact, dbei); } if (bRemove) { @@ -495,11 +495,11 @@ void CIcqProto::ParseMessage(MCONTACT hContact, __int64 &lastMsgId, const JSONNo CMStringA nick = (pos == -1) ? id : id.Left(pos); DB::AUTH_BLOB blob(hContact, nick, nullptr, nullptr, id, nullptr); - PROTORECVEVENT pre = {}; - pre.timestamp = (uint32_t)time(0); - pre.lParam = blob.size(); - pre.szMessage = blob; - ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)time(0); + dbei.cbBlob = blob.size(); + dbei.pBlob = blob; + ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&dbei); } return; } @@ -626,38 +626,29 @@ void CIcqProto::ParseMessage(MCONTACT hContact, __int64 &lastMsgId, const JSONNo ptrA szUtf(mir_utf8encodeW(wszText)); - if (hOldEvent) { - DBEVENTINFO dbei = {}; - dbei.szModule = m_szModuleName; - dbei.timestamp = iMsgTime; - dbei.flags = DBEF_UTF; - if (bIsOutgoing) - dbei.flags |= DBEF_SENT; - if (bCreateRead) - dbei.flags |= DBEF_READ; - dbei.cbBlob = (int)mir_strlen(szUtf); - dbei.pBlob = szUtf.get(); - dbei.szId = szMsgId; - if (isChatRoom(hContact)) - dbei.szUserId = szSender; - if (!szReply.IsEmpty()) - dbei.szReplyId = szReply; + DB::EventInfo dbei(hOldEvent); + dbei.szModule = m_szModuleName; + dbei.timestamp = iMsgTime; + dbei.flags = DBEF_UTF; + if (bIsOutgoing) + dbei.flags |= DBEF_SENT; + if (bCreateRead) + dbei.flags |= DBEF_READ; + dbei.cbBlob = (int)mir_strlen(szUtf); + dbei.pBlob = szUtf.get(); + dbei.szId = szMsgId; + if (isChatRoom(hContact)) + dbei.szUserId = szSender; + if (!szReply.IsEmpty()) + dbei.szReplyId = szReply; + + if (dbei) { + replaceStr(dbei.pBlob, szUtf.detach()); db_event_edit(hOldEvent, &dbei, true); } else { - PROTORECVEVENT pre = {}; - pre.timestamp = iMsgTime; - pre.szMessage = szUtf; - if (bIsOutgoing) - pre.flags |= PREF_SENT; - if (bCreateRead) - pre.flags |= PREF_CREATEREAD; - pre.szMsgId = szMsgId; - if (isChatRoom(hContact)) - pre.szUserId = szSender; - if (!szReply.IsEmpty()) - pre.szReplyId = szReply; - ProtoChainRecvMsg(hContact, &pre); + dbei.pBlob = szUtf; + ProtoChainRecvMsg(hContact, dbei); } } diff --git a/protocols/ICQCorp/src/protocol.cpp b/protocols/ICQCorp/src/protocol.cpp index cb24b1ddf4..576bf6eb76 100644 --- a/protocols/ICQCorp/src/protocol.cpp +++ b/protocols/ICQCorp/src/protocol.cpp @@ -1984,18 +1984,10 @@ void ICQ::addMessage(ICQUser *u, char *m, time_t t) { Netlib_Logf(hNetlibUser, "message: %s\n", m); - PROTORECVEVENT pre; - pre.flags = 0; - pre.timestamp = t; - pre.szMessage = (char*)m; - pre.lParam = 0; - - CCSDATA ccs; - ccs.hContact = u->hContact; - ccs.szProtoService = PSR_MESSAGE; - ccs.wParam = 0; - ccs.lParam = (LPARAM)⪯ - Proto_ChainRecv(0, &ccs); + DB::EventInfo dbei; + dbei.timestamp = t; + dbei.pBlob = m; + ProtoChainRecvMsg(u->hContact, dbei); } /////////////////////////////////////////////////////////////////////////////// @@ -2004,17 +1996,12 @@ void ICQ::addAwayMsg(ICQUser *u, char *m, unsigned long theSequence, time_t t) { Netlib_Logf(hNetlibUser, "away msg: %s\n", m); - PROTORECVEVENT pre; - pre.flags = 0; - pre.timestamp = t; - pre.szMessage = (char*)m; - pre.lParam = theSequence; - - CCSDATA ccs; - ccs.hContact = u->hContact; - ccs.szProtoService = PSR_AWAYMSG; - ccs.wParam = u->statusVal; - ccs.lParam = (LPARAM)⪯ + DB::EventInfo dbei; + dbei.timestamp = t; + dbei.pBlob = m; + dbei.cbBlob = theSequence; + + CCSDATA ccs = { u->hContact, PSR_AWAYMSG, u->statusVal, (LPARAM)&dbei }; Proto_ChainRecv(0, &ccs); } @@ -2029,26 +2016,16 @@ void ICQ::addFileReq(ICQUser *u, char *m, char *filename, unsigned long size, un icqTransfers.push_back(transfer); // Send chain event - char *szBlob = new char[sizeof(uint32_t) + mir_strlen(filename) + mir_strlen(m) + 2]; - - *(PDWORD)szBlob = (UINT_PTR)transfer; - mir_strcpy(szBlob + sizeof(uint32_t), filename); - mir_strcpy(szBlob + sizeof(uint32_t) + mir_strlen(filename) + 1, m); - - PROTORECVEVENT pre; - pre.flags = 0; - pre.timestamp = t; - pre.szMessage = szBlob; - pre.lParam = theSequence; - - CCSDATA ccs; - ccs.hContact = u->hContact; - ccs.szProtoService = PSR_FILE; - ccs.wParam = 0; - ccs.lParam = (LPARAM)⪯ + DB::FILE_BLOB blob(transfer, filename, m); + + DB::EventInfo dbei; + dbei.timestamp = t; + blob.write(dbei); + + CCSDATA ccs = { u->hContact, PSR_FILE, 0, (LPARAM)&dbei }; Proto_ChainRecv(0, &ccs); - delete[] szBlob; + mir_free(dbei.pBlob); } /////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/ICQCorp/src/services.cpp b/protocols/ICQCorp/src/services.cpp index 8dc6f047dd..d68f44e266 100644 --- a/protocols/ICQCorp/src/services.cpp +++ b/protocols/ICQCorp/src/services.cpp @@ -183,18 +183,14 @@ static INT_PTR icqRecvMessage(WPARAM, LPARAM lParam) CCSDATA *ccs = (CCSDATA*)lParam; Contact::Hide(ccs->hContact, false); - PROTORECVEVENT *pre = (PROTORECVEVENT*)ccs->lParam; - ptrA szMsg(mir_utf8encode(pre->szMessage)); + auto &dbei = *(DB::EventInfo*)ccs->lParam; + ptrA szMsg(mir_utf8encode(dbei.pBlob)); - DBEVENTINFO dbei = {}; dbei.szModule = protoName; - dbei.timestamp = pre->timestamp; dbei.flags = DBEF_UTF; - if (pre->flags & PREF_CREATEREAD) - dbei.flags |= DBEF_READ; dbei.eventType = EVENTTYPE_MESSAGE; dbei.cbBlob = (uint32_t)mir_strlen(szMsg) + 1; - dbei.pBlob = szMsg.get(); + dbei.pBlob = szMsg; db_event_add(ccs->hContact, &dbei); return 0; } @@ -235,8 +231,8 @@ static INT_PTR icqRecvAwayMsg(WPARAM, LPARAM lParam) Netlib_Logf(hNetlibUser, "[ ] receive away message\n"); CCSDATA *ccs = (CCSDATA *)lParam; - PROTORECVEVENT *pre = (PROTORECVEVENT *)ccs->lParam; - ProtoBroadcastAck(protoName, ccs->hContact, ACKTYPE_AWAYMSG, ACKRESULT_SUCCESS, (HANDLE)pre->lParam, _A2T(pre->szMessage)); + auto *dbei = (DB::EventInfo *)ccs->lParam; + ProtoBroadcastAck(protoName, ccs->hContact, ACKTYPE_AWAYMSG, ACKRESULT_SUCCESS, (HANDLE)dbei->cbBlob, _A2T(dbei->pBlob)); return 0; } @@ -356,16 +352,9 @@ static INT_PTR icqRecvFile(WPARAM, LPARAM lParam) CCSDATA *ccs = (CCSDATA *)lParam; Contact::Hide(ccs->hContact, false); - PROTORECVEVENT *pre = (PROTORECVEVENT *)ccs->lParam; - char *szFile = pre->szMessage + sizeof(uint32_t); - char *szDesc = szFile + mir_strlen(szFile) + 1; - - DB::EventInfo dbei; + auto &dbei = *(DB::EventInfo *)ccs->lParam; dbei.szModule = protoName; - dbei.timestamp = pre->timestamp; - dbei.flags = pre->flags & (PREF_CREATEREAD ? DBEF_READ : 0); dbei.eventType = EVENTTYPE_FILE; - DB::FILE_BLOB(_A2T(szFile), _A2T(szDesc)).write(dbei); db_event_add(ccs->hContact, &dbei); return 0; } diff --git a/protocols/IRCG/src/commandmonitor.cpp b/protocols/IRCG/src/commandmonitor.cpp index f36ec8d236..28350171b2 100644 --- a/protocols/IRCG/src/commandmonitor.cpp +++ b/protocols/IRCG/src/commandmonitor.cpp @@ -697,14 +697,14 @@ bool CIrcProto::OnIrc_PRIVMSG(const CIrcMessage *pmsg) } MCONTACT hContact = CList_AddContact(&user, false, true); + T2Utf utf(mess); - PROTORECVEVENT pre = {}; - pre.timestamp = (uint32_t)time(0); - pre.szMessage = mir_utf8encodeW(mess); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)time(0); + dbei.pBlob = utf; setWString(hContact, "User", pmsg->prefix.sUser); setWString(hContact, "Host", pmsg->prefix.sHost); - ProtoChainRecvMsg(hContact, &pre); - mir_free(pre.szMessage); + ProtoChainRecvMsg(hContact, dbei); return true; } diff --git a/protocols/IRCG/src/irclib.cpp b/protocols/IRCG/src/irclib.cpp index 4b6737f153..2861324bb0 100644 --- a/protocols/IRCG/src/irclib.cpp +++ b/protocols/IRCG/src/irclib.cpp @@ -1274,10 +1274,10 @@ void CDccSession::DoChatReceive() if (*pStart) { // send it off to some messaging module - PROTORECVEVENT pre = {}; - pre.timestamp = (uint32_t)time(0); - pre.szMessage = pStart; - ProtoChainRecvMsg(di->hContact, &pre); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)time(0); + dbei.pBlob = pStart; + ProtoChainRecvMsg(di->hContact, dbei); } cbInBuf -= pEnd - pStart; diff --git a/protocols/JabberG/src/jabber_ft.cpp b/protocols/JabberG/src/jabber_ft.cpp index 10900907f1..ed17240b5b 100644 --- a/protocols/JabberG/src/jabber_ft.cpp +++ b/protocols/JabberG/src/jabber_ft.cpp @@ -871,11 +871,11 @@ bool CJabberProto::FtTryInlineFile(filetransfer *ft) // emulate a message for us CMStringA szMsg(FORMAT, "[img]%s[/img]", T2Utf(wszFileName).get()); - PROTORECVEVENT recv = {}; - recv.flags = PREF_CREATEREAD | PREF_SENT; - recv.szMessage = szMsg.GetBuffer(); - recv.timestamp = time(0); - ProtoChainRecvMsg(ft->std.hContact, &recv); + DB::EventInfo dbei; + dbei.flags = DBEF_READ | DBEF_SENT; + dbei.pBlob = szMsg.GetBuffer(); + dbei.timestamp = time(0); + ProtoChainRecvMsg(ft->std.hContact, dbei); return true; } diff --git a/protocols/JabberG/src/jabber_misc.cpp b/protocols/JabberG/src/jabber_misc.cpp index a8e859f5ac..c1b7705855 100644 --- a/protocols/JabberG/src/jabber_misc.cpp +++ b/protocols/JabberG/src/jabber_misc.cpp @@ -52,11 +52,11 @@ void CJabberProto::DBAddAuthRequest(const char *jid, const char *nick) DB::AUTH_BLOB blob(hContact, nick, nullptr, nullptr, jid, nullptr); - PROTORECVEVENT pre = {}; - pre.timestamp = (uint32_t)time(0); - pre.lParam = blob.size(); - pre.szMessage = blob; - ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)time(0); + dbei.cbBlob = blob.size(); + dbei.pBlob = blob; + ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&dbei); debugLogA("Setup DBAUTHREQUEST with nick='%s' jid='%s'", blob.get_nick(), blob.get_email()); } @@ -499,10 +499,10 @@ void CJabberProto::OnGetBob(const TiXmlElement *node, CJabberIqInfo *pReq) wszFileName.Insert(0, L"[img]"); wszFileName.Append(L"[/img]"); T2Utf szMsg(wszFileName); - PROTORECVEVENT pre = {}; - pre.timestamp = time(0); - pre.szMessage = szMsg; - ProtoChainRecvMsg(pReq->GetHContact(), &pre); + DB::EventInfo dbei; + dbei.timestamp = time(0); + dbei.pBlob = szMsg; + ProtoChainRecvMsg(pReq->GetHContact(), dbei); } } } diff --git a/protocols/JabberG/src/jabber_omemo.cpp b/protocols/JabberG/src/jabber_omemo.cpp index f2e018e136..da350e9deb 100644 --- a/protocols/JabberG/src/jabber_omemo.cpp +++ b/protocols/JabberG/src/jabber_omemo.cpp @@ -1377,14 +1377,14 @@ bool CJabberProto::OmemoHandleMessage(const TiXmlElement *node, const char *jid, db_event_add(hContact, &dbei); } else { - PROTORECVEVENT recv = {}; - recv.timestamp = (uint32_t)msgTime; - recv.szMessage = result.GetBuffer(); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)msgTime; + dbei.pBlob = result.GetBuffer(); if (trusted) - recv.flags = PREF_ENCRYPTED; + dbei.flags = DBEF_STRONG; if (isCarbon) - recv.flags = PREF_SENT; - ProtoChainRecvMsg(hContact, &recv); + dbei.flags = DBEF_SENT; + ProtoChainRecvMsg(hContact, dbei); } return true; diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp index e9c9858219..193ad5d92f 100644 --- a/protocols/JabberG/src/jabber_proto.cpp +++ b/protocols/JabberG/src/jabber_proto.cpp @@ -454,9 +454,9 @@ int CJabberProto::AuthDeny(MEVENT hDbEvent, const wchar_t*) //////////////////////////////////////////////////////////////////////////////////////// // AuthRecv - receives a auth -int CJabberProto::AuthRecv(MCONTACT, PROTORECVEVENT *pre) +int CJabberProto::AuthRecv(MCONTACT, DB::EventInfo &dbei) { - return Proto_AuthRecv(m_szModuleName, pre); + return Proto_AuthRecv(m_szModuleName, dbei); } //////////////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/JabberG/src/jabber_proto.h b/protocols/JabberG/src/jabber_proto.h index 74265aca85..3a982c1958 100644 --- a/protocols/JabberG/src/jabber_proto.h +++ b/protocols/JabberG/src/jabber_proto.h @@ -119,7 +119,7 @@ struct CJabberProto : public PROTO, public IJabberInterface int Authorize(MEVENT hDbEvent) override; int AuthDeny(MEVENT hDbEvent, const wchar_t *szReason) override; - int AuthRecv(MCONTACT, PROTORECVEVENT *pre) override; + int AuthRecv(MCONTACT, DB::EventInfo &dbei) override; int AuthRequest(MCONTACT, const wchar_t *pwszReason) override; HANDLE FileAllow(MCONTACT hContact, HANDLE hTransfer, const wchar_t *szPath) override; diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp index 27fe3246a9..fd8a9abf68 100644 --- a/protocols/JabberG/src/jabber_thread.cpp +++ b/protocols/JabberG/src/jabber_thread.cpp @@ -1416,17 +1416,17 @@ void CJabberProto::OnProcessMessage(const TiXmlElement *node, ThreadData *info) if (!bOffline) CallService(MS_PROTO_CONTACTISTYPING, hContact, PROTOTYPE_CONTACTTYPING_OFF); - PROTORECVEVENT recv = {}; + DB::EventInfo dbei; if (bCreateRead) - recv.flags |= PREF_CREATEREAD; + dbei.flags |= DBEF_READ; if (bWasSent) - recv.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; - recv.timestamp = (uint32_t)msgTime; - recv.szMessage = szMessage.GetBuffer(); - recv.szMsgId = szMsgId; + dbei.timestamp = (uint32_t)msgTime; + dbei.pBlob = szMessage.GetBuffer(); + dbei.szId = szMsgId; - MEVENT hDbEVent = (MEVENT)ProtoChainRecvMsg(hContact, &recv); + MEVENT hDbEVent = (MEVENT)ProtoChainRecvMsg(hContact, dbei); if (idStr) m_arChatMarks.insert(new CChatMark(hDbEVent, idStr, from)); } diff --git a/protocols/NewsAggregator/Src/CheckFeed.cpp b/protocols/NewsAggregator/Src/CheckFeed.cpp index 60502647cc..b15724266c 100644 --- a/protocols/NewsAggregator/Src/CheckFeed.cpp +++ b/protocols/NewsAggregator/Src/CheckFeed.cpp @@ -187,10 +187,10 @@ static void XmlToMsg(MCONTACT hContact, CMStringW &title, CMStringW &link, CMStr T2Utf pszMessage(message); - PROTORECVEVENT recv = {}; - recv.timestamp = (uint32_t)stamp; - recv.szMessage = pszMessage; - ProtoChainRecvMsg(hContact, &recv); + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)stamp; + dbei.pBlob = pszMessage; + ProtoChainRecvMsg(hContact, dbei); } } diff --git a/protocols/NewsAggregator/Src/Services.cpp b/protocols/NewsAggregator/Src/Services.cpp index f809cd4058..3f0a4855ba 100644 --- a/protocols/NewsAggregator/Src/Services.cpp +++ b/protocols/NewsAggregator/Src/Services.cpp @@ -159,7 +159,7 @@ INT_PTR NewsAggrRecvMessage(WPARAM, LPARAM lParam) PROTOACCOUNT *pa = Proto_GetAccount(MODULENAME); if (pa && pa->ppro) { CCSDATA *ccs = (CCSDATA*)lParam; - pa->ppro->PROTO_INTERFACE::RecvMsg(ccs->hContact, (PROTORECVEVENT*)ccs->lParam); + pa->ppro->PROTO_INTERFACE::RecvMsg(ccs->hContact, *(DB::EventInfo*)ccs->lParam); } return 0; diff --git a/protocols/Sametime/src/messaging.cpp b/protocols/Sametime/src/messaging.cpp index 4def7ca30d..15650b9c6f 100644 --- a/protocols/Sametime/src/messaging.cpp +++ b/protocols/Sametime/src/messaging.cpp @@ -81,11 +81,10 @@ void mwIm_conversation_recv(mwConversation* conv, mwImSendType type, gconstpoint if (type != mwImSend_PLAIN) return; - PROTORECVEVENT pre = {}; - time_t t = time(0); - pre.timestamp = t; - pre.szMessage = (char*)msg; - ProtoChainRecvMsg(hContact, &pre); + DB::EventInfo dbei; + dbei.timestamp = time(0); + dbei.pBlob = (char*)msg; + ProtoChainRecvMsg(hContact, dbei); } void mwIm_place_invite(struct mwConversation* conv, const char* message, const char*, const char*) diff --git a/protocols/Sametime/src/sametime_proto.cpp b/protocols/Sametime/src/sametime_proto.cpp index 1174ec9481..9359562cca 100644 --- a/protocols/Sametime/src/sametime_proto.cpp +++ b/protocols/Sametime/src/sametime_proto.cpp @@ -171,14 +171,14 @@ MEVENT CSametimeProto::RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::Even return CSuper::RecvFile(hContact, blob, dbei); } -MEVENT CSametimeProto::RecvMsg(MCONTACT hContact, PROTORECVEVENT* pre) +MEVENT CSametimeProto::RecvMsg(MCONTACT hContact, DB::EventInfo &dbei) { debugLogW(L"CSametimeProto::RecvMsg() hContact=[%x]", hContact); Contact::Hide(hContact, false); Contact::PutOnList(hContact); - return CSuper::RecvMsg(hContact, pre); + return CSuper::RecvMsg(hContact, dbei); } HANDLE CSametimeProto::SendFile(MCONTACT hContact, const wchar_t* szDescription, wchar_t** ppszFiles) diff --git a/protocols/Sametime/src/sametime_proto.h b/protocols/Sametime/src/sametime_proto.h index 11d5002beb..b1eb82a7b0 100644 --- a/protocols/Sametime/src/sametime_proto.h +++ b/protocols/Sametime/src/sametime_proto.h @@ -25,7 +25,7 @@ struct CSametimeProto : public PROTO HWND CreateExtendedSearchUI(HWND owner) override; MEVENT RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei) override; - MEVENT RecvMsg(MCONTACT hContact, PROTORECVEVENT*) override; + MEVENT RecvMsg(MCONTACT hContact, DB::EventInfo &dbei) override; HANDLE SendFile(MCONTACT hContact, const wchar_t* szDescription, wchar_t** ppszFiles) override; int SendMsg(MCONTACT hContact, MEVENT, const char* msg) override; diff --git a/protocols/SkypeWeb/src/skype_contacts.cpp b/protocols/SkypeWeb/src/skype_contacts.cpp index 52b04369fd..c16ccaa97a 100644 --- a/protocols/SkypeWeb/src/skype_contacts.cpp +++ b/protocols/SkypeWeb/src/skype_contacts.cpp @@ -130,12 +130,11 @@ void CSkypeProto::LoadContactsAuth(MHttpResponse *response, AsyncHttpRequest*) DB::AUTH_BLOB blob(hContact, displayName.c_str(), nullptr, nullptr, skypeId.c_str(), reason.c_str()); - PROTORECVEVENT pre = {}; - pre.timestamp = time(0); - pre.lParam = blob.size(); - pre.szMessage = blob; - - ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = time(0); + dbei.cbBlob = blob.size(); + dbei.pBlob = blob; + ProtoChainRecv(hContact, PSR_AUTH, 0, dbei); } } diff --git a/protocols/SkypeWeb/src/skype_messages.cpp b/protocols/SkypeWeb/src/skype_messages.cpp index 99a84cb78d..ddb4af3433 100644 --- a/protocols/SkypeWeb/src/skype_messages.cpp +++ b/protocols/SkypeWeb/src/skype_messages.cpp @@ -134,12 +134,12 @@ void CSkypeProto::OnPrivateMessageEvent(const JSONNode &node) EditEvent(hDbEvent, wszContent, timestamp); else { T2Utf szMsg(wszContent); - PROTORECVEVENT recv = {}; - recv.timestamp = timestamp; - recv.szMessage = szMsg; - recv.lParam = nEmoteOffset; - recv.szMsgId = szMessageId; - ProtoChainRecvMsg(hContact, &recv); + DB::EventInfo dbei; + dbei.timestamp = timestamp; + dbei.pBlob = szMsg; + dbei.cbBlob = nEmoteOffset; + dbei.szId = szMessageId; + ProtoChainRecvMsg(hContact, dbei); } } } @@ -214,25 +214,17 @@ void CSkypeProto::ProcessContactRecv(MCONTACT hContact, time_t timestamp, const } if (nCount) { - PROTORECVEVENT pre = {}; - pre.timestamp = (uint32_t)timestamp; - pre.szMessage = (char*)psr; - - uint8_t *b = (uint8_t*)mir_calloc(sizeof(uint32_t) + mir_strlen(szMessageId) + 1); - uint8_t *pCur = b; - *((PDWORD)pCur) = nCount; - pCur += sizeof(uint32_t); - - mir_strcpy((char*)pCur, szMessageId); - - pre.lParam = (LPARAM)b; - - ProtoChainRecv(hContact, PSR_CONTACTS, 0, (LPARAM)&pre); - for (uint32_t i = 0; i < *((PDWORD)b); i++) { + DB::EventInfo dbei; + dbei.timestamp = (uint32_t)timestamp; + dbei.pBlob = (char*)psr; + dbei.cbBlob = nCount; + dbei.szId = szMessageId; + + ProtoChainRecv(hContact, PSR_CONTACTS, 0, (LPARAM)&dbei); + for (int i = 0; i < nCount; i++) { mir_free(psr[i]->id.a); mir_free(psr[i]); } - mir_free(b); } mir_free(psr); } diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp index 17fd5b2426..3e77308bbf 100644 --- a/protocols/SkypeWeb/src/skype_proto.cpp +++ b/protocols/SkypeWeb/src/skype_proto.cpp @@ -201,9 +201,9 @@ int CSkypeProto::AuthDeny(MEVENT hDbEvent, const wchar_t*) return 0; } -int CSkypeProto::AuthRecv(MCONTACT, PROTORECVEVENT* pre) +int CSkypeProto::AuthRecv(MCONTACT, DB::EventInfo &dbei) { - return Proto_AuthRecv(m_szModuleName, pre); + return Proto_AuthRecv(m_szModuleName, dbei); } int CSkypeProto::AuthRequest(MCONTACT hContact, const wchar_t *szMessage) @@ -273,18 +273,15 @@ int CSkypeProto::UserIsTyping(MCONTACT hContact, int type) return 0; } -int CSkypeProto::RecvContacts(MCONTACT hContact, PROTORECVEVENT* pre) +int CSkypeProto::RecvContacts(MCONTACT hContact, DB::EventInfo &dbei) { - PROTOSEARCHRESULT **isrList = (PROTOSEARCHRESULT**)pre->szMessage; + PROTOSEARCHRESULT **isrList = (PROTOSEARCHRESULT**)dbei.pBlob; - int nCount = *((LPARAM*)pre->lParam); - char* szMessageId = ((char*)pre->lParam + sizeof(LPARAM)); - - //if (GetMessageFromDb(hContact, szMessageId, pre->timestamp)) return 0; + int nCount = dbei.cbBlob; uint32_t cbBlob = 0; for (int i = 0; i < nCount; i++) - cbBlob += int(/*mir_wstrlen(isrList[i]->nick.w)*/0 + 2 + mir_wstrlen(isrList[i]->id.w) + mir_strlen(szMessageId)); + cbBlob += int(/*mir_wstrlen(isrList[i]->nick.w)*/0 + 2 + mir_wstrlen(isrList[i]->id.w)); char *pBlob = (char *)mir_calloc(cbBlob); char *pCurBlob = pBlob; @@ -296,13 +293,10 @@ int CSkypeProto::RecvContacts(MCONTACT hContact, PROTORECVEVENT* pre) pCurBlob += mir_strlen(pCurBlob) + 1; } - DBEVENTINFO dbei = {}; dbei.szModule = m_szModuleName; - dbei.timestamp = pre->timestamp; dbei.eventType = EVENTTYPE_CONTACTS; dbei.cbBlob = cbBlob; dbei.pBlob = pBlob; - dbei.flags = (pre->flags & PREF_CREATEREAD) ? DBEF_READ : 0; db_event_add(hContact, &dbei); mir_free(pBlob); diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index 11d91a6aa0..b2772ddc8d 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -55,14 +55,14 @@ public: int AuthRequest(MCONTACT hContact, const wchar_t* szMessage) override; int Authorize(MEVENT hDbEvent) override; int AuthDeny(MEVENT hDbEvent, const wchar_t* szReason) override; - int AuthRecv(MCONTACT hContact, PROTORECVEVENT*) override; + int AuthRecv(MCONTACT hContact, DB::EventInfo &dbei) override; INT_PTR GetCaps(int type, MCONTACT hContact = NULL) override; int GetInfo(MCONTACT hContact, int infoType) override; HANDLE SearchBasic(const wchar_t* id) override; int SendMsg(MCONTACT hContact, MEVENT hReplyEvent, const char* msg) override; int SetStatus(int iNewStatus) override; int UserIsTyping(MCONTACT hContact, int type) override; - int RecvContacts(MCONTACT hContact, PROTORECVEVENT*) override; + int RecvContacts(MCONTACT hContact, DB::EventInfo &dbei) override; HANDLE SendFile(MCONTACT hContact, const wchar_t *szDescription, wchar_t **ppszFiles) override; HANDLE GetAwayMsg(MCONTACT hContact) override; int SetAwayMsg(int m_iStatus, const wchar_t *msg) override; diff --git a/protocols/Steam/src/steam_contacts.cpp b/protocols/Steam/src/steam_contacts.cpp index 9ed0746a48..8f0d7e3306 100644 --- a/protocols/Steam/src/steam_contacts.cpp +++ b/protocols/Steam/src/steam_contacts.cpp @@ -308,11 +308,11 @@ void CSteamProto::ContactIsAskingAuth(MCONTACT hContact) DB::AUTH_BLOB blob(hContact, nickName, firstName, lastName, steamId, reason); - PROTORECVEVENT recv = {}; - recv.timestamp = now(); - recv.szMessage = blob; - recv.lParam = blob.size(); - ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&recv); + DB::EventInfo dbei; + dbei.timestamp = now(); + dbei.pBlob = blob; + dbei.cbBlob = blob.size(); + ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&dbei); } MCONTACT CSteamProto::AddContact(const char *steamId, const wchar_t *nick, bool isTemporary) diff --git a/protocols/Steam/src/steam_history.cpp b/protocols/Steam/src/steam_history.cpp index 9590ceb26d..a57f59a9e3 100644 --- a/protocols/Steam/src/steam_history.cpp +++ b/protocols/Steam/src/steam_history.cpp @@ -53,14 +53,14 @@ void CSteamProto::OnGotHistoryMessages(const JSONNode &root, void *arg) if (timestamp <= storedMessageTS) continue; - PROTORECVEVENT recv = {}; - recv.timestamp = timestamp; - recv.szMessage = (char *)text.c_str(); + DB::EventInfo dbei; + dbei.timestamp = timestamp; + dbei.pBlob = (char *)text.c_str(); if (IsMe(steamId)) - recv.flags = PREF_SENT; + dbei.flags = DBEF_SENT; - RecvMsg(hContact, &recv); + RecvMsg(hContact, dbei); if (timestamp > newTS) newTS = timestamp; diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp index f41698b34b..7cb7ec5ae5 100644 --- a/protocols/Steam/src/steam_proto.cpp +++ b/protocols/Steam/src/steam_proto.cpp @@ -139,11 +139,11 @@ int CSteamProto::Authorize(MEVENT hDbEvent) return 1; } -int CSteamProto::AuthRecv(MCONTACT hContact, PROTORECVEVENT *pre) +int CSteamProto::AuthRecv(MCONTACT hContact, DB::EventInfo &dbei) { // remember to not create this event again, unless authorization status changes again setByte(hContact, "AuthAsked", 1); - return Proto_AuthRecv(m_szModuleName, pre); + return Proto_AuthRecv(m_szModuleName, dbei); } int CSteamProto::AuthDeny(MEVENT hDbEvent, const wchar_t*) diff --git a/protocols/Steam/src/steam_proto.h b/protocols/Steam/src/steam_proto.h index 8cb7fdf0c0..7110861a58 100644 --- a/protocols/Steam/src/steam_proto.h +++ b/protocols/Steam/src/steam_proto.h @@ -268,7 +268,7 @@ public: MCONTACT AddToListByEvent(int flags, int iContact, MEVENT hDbEvent) override; int Authorize(MEVENT hDbEvent) override; - int AuthRecv(MCONTACT, PROTORECVEVENT*) override; + int AuthRecv(MCONTACT, DB::EventInfo &dbei) override; int AuthDeny(MEVENT hDbEvent, const wchar_t *szReason) override; int AuthRequest(MCONTACT hContact, const wchar_t *szMessage) override; diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index 8fd72e3e59..8c39fe9a0f 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -787,40 +787,27 @@ void CTelegramProto::ProcessMessage(const TD::message *pMessage) Contact::RemoveFromList(pUser->hContact); } - if (hOldEvent) { - DB::EventInfo dbei(hOldEvent); - mir_free(dbei.pBlob); - dbei.cbBlob = szText.GetLength(); - dbei.pBlob = szText.GetBuffer(); - dbei.timestamp = pMessage->date_; - if (pMessage->is_outgoing_) - dbei.flags |= DBEF_SENT; - if (!pUser->bInited) - dbei.flags |= DBEF_READ; - if (GetGcUserId(pUser, pMessage, szUserId)) - dbei.szUserId = szUserId; - if (pMessage->reply_to_message_id_) { - szReplyId = msg2id(pMessage->chat_id_, pMessage->reply_to_message_id_); - dbei.szReplyId = szReplyId; - } + DB::EventInfo dbei(hOldEvent); + dbei.cbBlob = szText.GetLength(); + dbei.timestamp = pMessage->date_; + if (pMessage->is_outgoing_) + dbei.flags |= DBEF_SENT; + if (!pUser->bInited) + dbei.flags |= DBEF_READ; + if (GetGcUserId(pUser, pMessage, szUserId)) + dbei.szUserId = szUserId; + if (pMessage->reply_to_message_id_) { + szReplyId = msg2id(pMessage->chat_id_, pMessage->reply_to_message_id_); + dbei.szReplyId = szReplyId; + } + + if (dbei) { + replaceStr(dbei.pBlob, szText.Detach()); db_event_edit(hOldEvent, &dbei, true); } else { - PROTORECVEVENT pre = {}; - pre.szMessage = szText.GetBuffer(); - pre.szMsgId = szMsgId; - pre.timestamp = pMessage->date_; - if (pMessage->is_outgoing_) - pre.flags |= PREF_SENT; - if (!pUser->bInited) - pre.flags |= PREF_CREATEREAD; - if (GetGcUserId(pUser, pMessage, szUserId)) - pre.szUserId = szUserId; - if (pMessage->reply_to_message_id_) { - szReplyId = msg2id(pMessage->chat_id_, pMessage->reply_to_message_id_); - pre.szReplyId = szReplyId; - } - ProtoChainRecvMsg(GetRealContact(pUser), &pre); + dbei.pBlob = szText.GetBuffer(); + ProtoChainRecvMsg(GetRealContact(pUser), dbei); } } diff --git a/protocols/Tox/src/tox_contacts.cpp b/protocols/Tox/src/tox_contacts.cpp index db472e3ed0..869386523c 100644 --- a/protocols/Tox/src/tox_contacts.cpp +++ b/protocols/Tox/src/tox_contacts.cpp @@ -234,11 +234,11 @@ void CToxProto::OnFriendRequest(Tox*, const uint8_t *pubKey, const uint8_t *mess DB::AUTH_BLOB blob(hContact, nullptr, nullptr, nullptr, (LPCSTR)address, (LPCSTR)message); - PROTORECVEVENT pre = {}; - pre.timestamp = now(); - pre.lParam = blob.size(); - pre.szMessage = blob; - ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); + DB::EventInfo dbei; + dbei.timestamp = now(); + dbei.cbBlob = blob.size(); + dbei.pBlob = blob; + ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&dbei); } void CToxProto::OnFriendNameChange(Tox *tox, uint32_t friendNumber, const uint8_t *name, size_t length, void *arg) diff --git a/protocols/Tox/src/tox_messages.cpp b/protocols/Tox/src/tox_messages.cpp index 3cf6054f9e..74994f6ddd 100644 --- a/protocols/Tox/src/tox_messages.cpp +++ b/protocols/Tox/src/tox_messages.cpp @@ -51,18 +51,18 @@ void CToxProto::OnFriendMessage(Tox *tox, uint32_t friendNumber, TOX_MESSAGE_TYP else mir_strncpy(rawMessage, (const char*)message, length + 1); rawMessage[length] = 0; - PROTORECVEVENT recv = {}; - recv.timestamp = now(); - recv.szMessage = rawMessage; + DB::EventInfo dbei; + dbei.timestamp = now(); + dbei.pBlob = rawMessage; switch (type) { case TOX_MESSAGE_TYPE_NORMAL: - recv.lParam = EVENTTYPE_MESSAGE; + dbei.eventType = EVENTTYPE_MESSAGE; break; case TOX_MESSAGE_TYPE_ACTION: - recv.lParam = DB_EVENT_ACTION; + dbei.eventType = DB_EVENT_ACTION; break; } - ProtoChainRecvMsg(hContact, &recv); + ProtoChainRecvMsg(hContact, dbei); CallService(MS_PROTO_CONTACTISTYPING, hContact, (LPARAM)PROTOTYPE_CONTACTTYPING_OFF); } diff --git a/protocols/Tox/src/tox_proto.cpp b/protocols/Tox/src/tox_proto.cpp index d701171a0f..331475be6d 100644 --- a/protocols/Tox/src/tox_proto.cpp +++ b/protocols/Tox/src/tox_proto.cpp @@ -95,9 +95,9 @@ int CToxProto::Authorize(MEVENT hDbEvent) return OnGrantAuth(hContact, 0); } -int CToxProto::AuthRecv(MCONTACT, PROTORECVEVENT* pre) +int CToxProto::AuthRecv(MCONTACT, DB::EventInfo &dbei) { - return Proto_AuthRecv(m_szModuleName, pre); + return Proto_AuthRecv(m_szModuleName, dbei); } int CToxProto::AuthRequest(MCONTACT hContact, const wchar_t *szMessage) diff --git a/protocols/Tox/src/tox_proto.h b/protocols/Tox/src/tox_proto.h index f5969c8f5e..36fde9576b 100644 --- a/protocols/Tox/src/tox_proto.h +++ b/protocols/Tox/src/tox_proto.h @@ -42,7 +42,7 @@ public: MCONTACT AddToList(int flags, PROTOSEARCHRESULT *psr) override; int Authorize(MEVENT hDbEvent) override; - int AuthRecv(MCONTACT hContact, PROTORECVEVENT *) override; + int AuthRecv(MCONTACT hContact, DB::EventInfo &dbei) override; int AuthRequest(MCONTACT hContact, const wchar_t *szMessage) override; HANDLE FileAllow(MCONTACT hContact, HANDLE hTransfer, const wchar_t *tszPath) override; diff --git a/protocols/VKontakte/src/vk_chats.cpp b/protocols/VKontakte/src/vk_chats.cpp index d61254228d..34e4693848 100644 --- a/protocols/VKontakte/src/vk_chats.cpp +++ b/protocols/VKontakte/src/vk_chats.cpp @@ -539,18 +539,16 @@ void CVkProto::AppendChatMessage(CVkChatInfo* vkChatInfo, VKMessageID_t iMessage T2Utf pszBody(pwszBody); - PROTORECVEVENT pre = {}; - pre.szMsgId = szMid; - pre.timestamp = tMsgTime; - pre.szMessage = pszBody; + DB::EventInfo dbei; + dbei.szId = szMid; + dbei.timestamp = tMsgTime; + dbei.pBlob = pszBody; if (iUserId == m_iMyUserId) - pre.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; if (bIsHistory) - pre.flags |= PREF_CREATEREAD; - - pre.szUserId = szId; - - ProtoChainRecvMsg(hChatContact, &pre); + dbei.flags |= DBEF_READ; + dbei.szUserId = szId; + ProtoChainRecvMsg(hChatContact, dbei); } StopChatContactTyping(vkChatInfo->m_iChatId, iUserId); diff --git a/protocols/VKontakte/src/vk_feed.cpp b/protocols/VKontakte/src/vk_feed.cpp index 1fc2a5587f..b3bc4e5424 100644 --- a/protocols/VKontakte/src/vk_feed.cpp +++ b/protocols/VKontakte/src/vk_feed.cpp @@ -55,16 +55,16 @@ void CVkProto::AddFeedEvent(CVKNewsItem& vkNewsItem) MCONTACT hContact = FindUser(VK_FEED_USER, true); T2Utf pszBody(vkNewsItem.wszText); - PROTORECVEVENT recv = {}; - recv.timestamp = vkNewsItem.tDate; - recv.szMessage = pszBody; + DB::EventInfo dbei; + dbei.timestamp = vkNewsItem.tDate; + dbei.pBlob = pszBody; if (m_vkOptions.bUseNonStandardNotifications) { - recv.flags = PREF_CREATEREAD; + dbei.flags = DBEF_READ; MsgPopup(hContact, vkNewsItem.wszPopupText, vkNewsItem.wszPopupTitle); } - ProtoChainRecvMsg(hContact, &recv); + ProtoChainRecvMsg(hContact, dbei); } void CVkProto::AddCListEvent(bool bNews) diff --git a/protocols/VKontakte/src/vk_history.cpp b/protocols/VKontakte/src/vk_history.cpp index fb40e9b444..bb386c812d 100644 --- a/protocols/VKontakte/src/vk_history.cpp +++ b/protocols/VKontakte/src/vk_history.cpp @@ -273,11 +273,11 @@ void CVkProto::OnReceiveHistoryMessages(MHttpResponse *reply, AsyncHttpRequest * wszBody += SetBBCString(TranslateT("Message link"), m_vkOptions.BBCForAttachments(), vkbbcUrl, CMStringW(FORMAT, L"https://vk.com/im?sel=%d&msgid=%d", iUserId, iMessageId)); - PROTORECVEVENT recv = {}; + DB::EventInfo dbei; if (bIsRead) - recv.flags |= PREF_CREATEREAD; + dbei.flags |= DBEF_READ; if (bIsOut) - recv.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; time_t tUpdateTime = (time_t)jnMsg["update_time"].as_int(); if (tUpdateTime) { @@ -298,14 +298,14 @@ void CVkProto::OnReceiveHistoryMessages(MHttpResponse *reply, AsyncHttpRequest * T2Utf pszBody(wszBody); - recv.timestamp = tDateTime; - recv.szMessage = pszBody; - recv.szMsgId = szMid; + dbei.timestamp = tDateTime; + dbei.pBlob = pszBody; + dbei.szId = szMid; if (!m_vkOptions.bShowReplyInMessage && szReplyId) - recv.szReplyId = szReplyId; + dbei.szReplyId = szReplyId; - ProtoChainRecvMsg(hContact, &recv); + ProtoChainRecvMsg(hContact, dbei); MEVENT hDbEvent = db_event_getById(m_szModuleName, strcat(szMid, "_")); if (hDbEvent) diff --git a/protocols/VKontakte/src/vk_messages.cpp b/protocols/VKontakte/src/vk_messages.cpp index ced871a809..89d6ec54cc 100644 --- a/protocols/VKontakte/src/vk_messages.cpp +++ b/protocols/VKontakte/src/vk_messages.cpp @@ -440,30 +440,29 @@ void CVkProto::OnReceiveMessages(MHttpResponse *reply, AsyncHttpRequest *pReq) wszOldMsg; } - PROTORECVEVENT recv = {}; + DB::EventInfo dbei; if (isRead && bUseServerReadFlag) - recv.flags |= PREF_CREATEREAD; + dbei.flags |= DBEF_READ; if (isOut) - recv.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; else if (m_vkOptions.bUserForceInvisibleOnActivity && ((time(0) - tDateTime) < (60 * m_vkOptions.iInvisibleInterval))) SetInvisible(hContact); T2Utf pszBody(wszBody); - recv.timestamp = bEdited ? tDateTime : (m_vkOptions.bUseLocalTime ? time(0) : tDateTime); - recv.szMessage = pszBody; + dbei.timestamp = bEdited ? tDateTime : (m_vkOptions.bUseLocalTime ? time(0) : tDateTime); + dbei.pBlob = pszBody; if (!m_vkOptions.bShowReplyInMessage && szReplyId) - recv.szReplyId = szReplyId; + dbei.szReplyId = szReplyId; debugLogA("CVkProto::OnReceiveMessages mid = %d, datetime = %d, isOut = %d, isRead = %d, iUserId = %d, Edited = %d", iMessageId, tDateTime, isOut, isRead, iUserId, (int)bEdited); - if (!IsMessageExist(iMessageId, vkALL) || bEdited || (m_vkOptions.bShowReplyInMessage && szReplyId)) { debugLogA("CVkProto::OnReceiveMessages new or edited message"); - recv.szMsgId = szMid; - ProtoChainRecvMsg(hContact, &recv); + dbei.szId = szMid; + ProtoChainRecvMsg(hContact, dbei); if (iMessageId > ReadQSWord(hContact, "lastmsgid", -1)) WriteQSWord(hContact, "lastmsgid", iMessageId); } @@ -479,10 +478,10 @@ void CVkProto::OnReceiveMessages(MHttpResponse *reply, AsyncHttpRequest *pReq) debugLogA("CVkProto::OnReceiveMessages add attachments"); T2Utf pszAttach(wszAttachmentDescr); - recv.timestamp = isOut ? time(0) : tDateTime; - recv.szMessage = pszAttach; - recv.szMsgId = strcat(szMid, "_"); - ProtoChainRecvMsg(hContact, &recv); + dbei.timestamp = isOut ? time(0) : tDateTime; + dbei.pBlob = pszAttach; + dbei.szId = strcat(szMid, "_"); + ProtoChainRecvMsg(hContact, dbei); } } } diff --git a/protocols/VKontakte/src/vk_pollserver.cpp b/protocols/VKontakte/src/vk_pollserver.cpp index 10bd5c7e43..00c0928749 100644 --- a/protocols/VKontakte/src/vk_pollserver.cpp +++ b/protocols/VKontakte/src/vk_pollserver.cpp @@ -137,9 +137,9 @@ void CVkProto::PollUpdates(const JSONNode &jnUpdates) m_vkOptions.BBCForAttachments(), vkbbcB) + wszMsg; - PROTORECVEVENT recv = {}; + DB::EventInfo dbei; if (iUserId == m_iMyUserId) - recv.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; else if (m_vkOptions.bUserForceInvisibleOnActivity && time(0) - tDateTime < 60 * m_vkOptions.iInvisibleInterval) SetInvisible(hContact); @@ -147,10 +147,10 @@ void CVkProto::PollUpdates(const JSONNode &jnUpdates) _itoa(iMessageId, szMid, 10); T2Utf pszMsg(wszMsg); - recv.timestamp = tDateTime; - recv.szMessage = pszMsg; - recv.szMsgId = szMid; - ProtoChainRecvMsg(hContact, &recv); + dbei.timestamp = tDateTime; + dbei.pBlob = pszMsg; + dbei.szId = szMid; + ProtoChainRecvMsg(hContact, dbei); } break; diff --git a/protocols/WhatsApp/src/appsync.cpp b/protocols/WhatsApp/src/appsync.cpp index 6eb435db02..62ca86b979 100644 --- a/protocols/WhatsApp/src/appsync.cpp +++ b/protocols/WhatsApp/src/appsync.cpp @@ -274,16 +274,16 @@ void WhatsAppProto::ProcessHistorySync(const Wa__HistorySync *pSync) if (!szMessageText.IsEmpty()) { auto *key = pMessage->message->key; - PROTORECVEVENT pre = {}; - pre.timestamp = pMessage->message->messagetimestamp; - pre.szMessage = szMessageText.GetBuffer(); - pre.szMsgId = key->id; - pre.flags = PREF_CREATEREAD; + DB::EventInfo dbei; + dbei.timestamp = pMessage->message->messagetimestamp; + dbei.pBlob = szMessageText.GetBuffer(); + dbei.szId = key->id; + dbei.flags = DBEF_READ; if (key->fromme) - pre.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; if (pUser->bIsGroupChat) - pre.szUserId = key->participant; - ProtoChainRecvMsg(pUser->hContact, &pre); + dbei.szUserId = key->participant; + ProtoChainRecvMsg(pUser->hContact, dbei); } } } diff --git a/protocols/WhatsApp/src/message.cpp b/protocols/WhatsApp/src/message.cpp index 96f23dde17..a664e49953 100644 --- a/protocols/WhatsApp/src/message.cpp +++ b/protocols/WhatsApp/src/message.cpp @@ -211,17 +211,17 @@ void WhatsAppProto::ProcessMessage(WAMSG type, const Wa__WebMessageInfo &msg) if (!szMessageText.IsEmpty()) { // for chats & group chats store message in profile if (type.bPrivateChat || type.bGroupChat) { - PROTORECVEVENT pre = {}; - pre.timestamp = timestamp; - pre.szMessage = szMessageText.GetBuffer(); - pre.szMsgId = msgId; + DB::EventInfo dbei; + dbei.timestamp = timestamp; + dbei.pBlob = szMessageText.GetBuffer(); + dbei.szId = msgId; if (type.bOffline) - pre.flags |= PREF_CREATEREAD; + dbei.flags |= DBEF_READ; if (key->fromme) - pre.flags |= PREF_SENT; + dbei.flags |= DBEF_SENT; if (pUser->bIsGroupChat) - pre.szUserId = participant; - ProtoChainRecvMsg(pUser->hContact, &pre); + dbei.szUserId = participant; + ProtoChainRecvMsg(pUser->hContact, dbei); } // translate statuses into status messages else if (type.bOtherStatus || type.bDirectStatus || type.bPeerBroadcast || type.bOtherBroadcast) { diff --git a/src/core/stdmsg/src/cmdlist.cpp b/src/core/stdmsg/src/cmdlist.cpp index 40aeeb1fb1..ab90a67a1f 100644 --- a/src/core/stdmsg/src/cmdlist.cpp +++ b/src/core/stdmsg/src/cmdlist.cpp @@ -91,7 +91,7 @@ void msgQueue_processack(MCONTACT hContact, int id, BOOL success, LPARAM lParam) DBEVENTINFO dbei = {}; dbei.eventType = EVENTTYPE_MESSAGE; - dbei.flags = DBEF_SENT | DBEF_UTF | (p->flags & PREF_RTL ? DBEF_RTL : 0); + dbei.flags = DBEF_SENT | DBEF_UTF | (p->flags & DBEF_RTL ? DBEF_RTL : 0); dbei.szModule = Proto_GetBaseAccountName(hContact); dbei.timestamp = time(0); dbei.cbBlob = (uint32_t)(mir_strlen(p->szMsg) + 1); diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index 7e084916fa..88d2beccff 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -36,7 +36,7 @@ int SendMessageDirect(MCONTACT hContact, MEVENT hEvent, const wchar_t *szMsg) int flags = 0; if (Utils_IsRtl(szMsg)) - flags |= PREF_RTL; + flags |= DBEF_RTL; T2Utf sendBuffer(szMsg); if (!mir_strlen(sendBuffer)) diff --git a/src/mir_app/src/db_events.cpp b/src/mir_app/src/db_events.cpp index f8e34191de..45936d8900 100644 --- a/src/mir_app/src/db_events.cpp +++ b/src/mir_app/src/db_events.cpp @@ -264,7 +264,8 @@ DB::EventInfo::EventInfo() : DB::EventInfo::~EventInfo() { - mir_free(pBlob); + if (bValid) + mir_free(pBlob); } bool DB::EventInfo::fetch(MEVENT hEvent, bool bFetchBlob) diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 7ebde24f72..42d8f60e6c 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -34,7 +34,7 @@ Button_SetSkin_IcoLib @24 ?AddToList@PROTO_INTERFACE@@UAEIHPAUPROTOSEARCHRESULT@@@Z @34 NONAME ?AddToListByEvent@PROTO_INTERFACE@@UAEIHHI@Z @35 NONAME ?AuthDeny@PROTO_INTERFACE@@UAEHIPB_W@Z @36 NONAME -?AuthRecv@PROTO_INTERFACE@@UAEHIPAUPROTORECVEVENT@@@Z @37 NONAME +?AuthRecv@PROTO_INTERFACE@@UAEHIAAVEventInfo@DB@@@Z @37 NONAME ?AuthRequest@PROTO_INTERFACE@@UAEHIPB_W@Z @38 NONAME ?Authorize@PROTO_INTERFACE@@UAEHI@Z @39 NONAME ?CreateExtendedSearchUI@PROTO_INTERFACE@@UAEPAUHWND__@@PAU2@@Z @40 NONAME @@ -53,9 +53,9 @@ Button_SetSkin_IcoLib @24 ?OnProtoCheckOnline@CProtoIntDlgBase@@MAEXIJ@Z @54 NONAME ?OnProtoRefresh@CProtoIntDlgBase@@MAEXIJ@Z @55 NONAME ?ProtoBroadcastAck@PROTO_INTERFACE@@QAEHIHHPAXJ@Z @56 NONAME -?RecvContacts@PROTO_INTERFACE@@UAEHIPAUPROTORECVEVENT@@@Z @58 NONAME +?RecvContacts@PROTO_INTERFACE@@UAEHIAAVEventInfo@DB@@@Z @57 NONAME ?RecvFile@PROTO_INTERFACE@@UAEIIAAVFILE_BLOB@DB@@AAVEventInfo@3@@Z @59 NONAME -?RecvMsg@PROTO_INTERFACE@@UAEIIPAUPROTORECVEVENT@@@Z @60 NONAME +?RecvMsg@PROTO_INTERFACE@@UAEIIAAVEventInfo@DB@@@Z @60 NONAME ?SearchAdvanced@PROTO_INTERFACE@@UAEPAXPAUHWND__@@@Z @62 NONAME ?SearchBasic@PROTO_INTERFACE@@UAEPAXPB_W@Z @63 NONAME ?SearchByEmail@PROTO_INTERFACE@@UAEPAXPB_W@Z @64 NONAME diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 6de004a53d..7274527130 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -34,7 +34,7 @@ Button_SetSkin_IcoLib @24 ?AddToList@PROTO_INTERFACE@@UEAAIHPEAUPROTOSEARCHRESULT@@@Z @34 NONAME ?AddToListByEvent@PROTO_INTERFACE@@UEAAIHHI@Z @35 NONAME ?AuthDeny@PROTO_INTERFACE@@UEAAHIPEB_W@Z @36 NONAME -?AuthRecv@PROTO_INTERFACE@@UEAAHIPEAUPROTORECVEVENT@@@Z @37 NONAME +?AuthRecv@PROTO_INTERFACE@@UEAAHIAEAVEventInfo@DB@@@Z @37 NONAME ?AuthRequest@PROTO_INTERFACE@@UEAAHIPEB_W@Z @38 NONAME ?Authorize@PROTO_INTERFACE@@UEAAHI@Z @39 NONAME ?CreateExtendedSearchUI@PROTO_INTERFACE@@UEAAPEAUHWND__@@PEAU2@@Z @40 NONAME @@ -53,9 +53,9 @@ Button_SetSkin_IcoLib @24 ?OnProtoCheckOnline@CProtoIntDlgBase@@MEAAX_K_J@Z @54 NONAME ?OnProtoRefresh@CProtoIntDlgBase@@MEAAX_K_J@Z @55 NONAME ?ProtoBroadcastAck@PROTO_INTERFACE@@QEAA_JIHHPEAX_J@Z @56 NONAME -?RecvContacts@PROTO_INTERFACE@@UEAAHIPEAUPROTORECVEVENT@@@Z @58 NONAME +?RecvContacts@PROTO_INTERFACE@@UEAAHIAEAVEventInfo@DB@@@Z @57 NONAME ?RecvFile@PROTO_INTERFACE@@UEAAIIAEAVFILE_BLOB@DB@@AEAVEventInfo@3@@Z @59 NONAME -?RecvMsg@PROTO_INTERFACE@@UEAAIIPEAUPROTORECVEVENT@@@Z @60 NONAME +?RecvMsg@PROTO_INTERFACE@@UEAAIIAEAVEventInfo@DB@@@Z @60 NONAME ?SearchAdvanced@PROTO_INTERFACE@@UEAAPEAXPEAUHWND__@@@Z @62 NONAME ?SearchBasic@PROTO_INTERFACE@@UEAAPEAXPEB_W@Z @63 NONAME ?SearchByEmail@PROTO_INTERFACE@@UEAAPEAXPEB_W@Z @64 NONAME diff --git a/src/mir_app/src/proto_chains.cpp b/src/mir_app/src/proto_chains.cpp index 315ad6ff2b..cd937f23fc 100644 --- a/src/mir_app/src/proto_chains.cpp +++ b/src/mir_app/src/proto_chains.cpp @@ -62,7 +62,7 @@ MIR_APP_DLL(INT_PTR) Proto_ChainSend(int iOrder, CCSDATA *ccs) for (int i = iOrder; i < g_arFilters.getCount(); i++) { if ((ret = CallProtoService(g_arFilters[i]->szName, ccs->szProtoService, i + 1, LPARAM(ccs))) != CALLSERVICE_NOTFOUND) { - //chain was started, exit + // chain was started, exit return ret; } } diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp index 76b7b17778..83c4f994f1 100644 --- a/src/mir_app/src/proto_interface.cpp +++ b/src/mir_app/src/proto_interface.cpp @@ -134,7 +134,7 @@ int PROTO_INTERFACE::AuthDeny(MEVENT, const wchar_t*) return 1; // error } -int PROTO_INTERFACE::AuthRecv(MCONTACT, PROTORECVEVENT*) +int PROTO_INTERFACE::AuthRecv(MCONTACT, DB::EventInfo&) { return 1; // error } @@ -199,7 +199,7 @@ MWindow PROTO_INTERFACE::CreateExtendedSearchUI(MWindow) return nullptr; // error } -int PROTO_INTERFACE::RecvContacts(MCONTACT, PROTORECVEVENT*) +int PROTO_INTERFACE::RecvContacts(MCONTACT, DB::EventInfo &) { return 1; // error } @@ -209,37 +209,19 @@ MEVENT PROTO_INTERFACE::RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::Eve return Proto_RecvFile(hContact, blob, dbei); } -MEVENT PROTO_INTERFACE::RecvMsg(MCONTACT hContact, PROTORECVEVENT *pre) +MEVENT PROTO_INTERFACE::RecvMsg(MCONTACT hContact, DB::EventInfo &dbei) { - if (pre->szMessage == nullptr) - return 0; - - DBEVENTINFO dbei = {}; - dbei.flags = DBEF_UTF; + dbei.flags |= DBEF_UTF; dbei.szModule = Proto_GetBaseAccountName(hContact); - dbei.timestamp = pre->timestamp; dbei.eventType = EVENTTYPE_MESSAGE; - dbei.cbBlob = (uint32_t)mir_strlen(pre->szMessage) + 1; - dbei.pBlob = pre->szMessage; - dbei.szUserId = pre->szUserId; - dbei.szReplyId = pre->szReplyId; - - if (pre->flags & PREF_CREATEREAD) - dbei.flags |= DBEF_READ; - if (pre->flags & PREF_SENT) - dbei.flags |= DBEF_SENT; - if (pre->flags & PREF_ENCRYPTED) - dbei.flags |= DBEF_SECURE; - if (pre->flags & PREF_ENCRYPTED_STRONG) - dbei.flags |= DBEF_STRONG; + dbei.cbBlob = (uint32_t)mir_strlen(dbei.pBlob) + 1; // if it's possible to find an existing event by its id, do that - if ((GetCaps(PFLAGNUM_4) & PF4_SERVERMSGID) && pre->szMsgId != nullptr) { - MEVENT hDbEvent = db_event_getById(m_szModuleName, pre->szMsgId); - if (hDbEvent == 0 || db_event_edit(hDbEvent, &dbei)) { - dbei.szId = pre->szMsgId; + if ((GetCaps(PFLAGNUM_4) & PF4_SERVERMSGID) && dbei.szId != nullptr) { + MEVENT hDbEvent = db_event_getById(m_szModuleName, dbei.szId); + if (hDbEvent == 0 || db_event_edit(hDbEvent, &dbei)) hDbEvent = db_event_add(hContact, &dbei); - } + return hDbEvent; } diff --git a/src/mir_app/src/proto_internal.cpp b/src/mir_app/src/proto_internal.cpp index d70491b902..50fa594489 100644 --- a/src/mir_app/src/proto_internal.cpp +++ b/src/mir_app/src/proto_internal.cpp @@ -58,9 +58,9 @@ struct DEFAULT_PROTO_INTERFACE : public PROTO_INTERFACE return (int)ProtoCallService(m_szModuleName, PS_AUTHDENY, hDbEvent, _T2A(szReason)); } - int AuthRecv(MCONTACT hContact, PROTORECVEVENT *evt) override + int AuthRecv(MCONTACT hContact, DB::EventInfo &dbei) override { - CCSDATA ccs = { hContact, PSR_AUTH, 0, (LPARAM)evt }; + CCSDATA ccs = { hContact, PSR_AUTH, 0, (LPARAM)&dbei }; return (int)ProtoCallService(m_szModuleName, PSR_AUTH, 0, (LPARAM)&ccs); } @@ -169,9 +169,9 @@ struct DEFAULT_PROTO_INTERFACE : public PROTO_INTERFACE return (HWND)ProtoCallService(m_szModuleName, PS_CREATEADVSEARCHUI, 0, (LPARAM)owner); } - int RecvContacts(MCONTACT hContact, PROTORECVEVENT* evt) override + int RecvContacts(MCONTACT hContact, DB::EventInfo &dbei) override { - CCSDATA ccs = { hContact, PSR_CONTACTS, 0, (LPARAM)evt }; + CCSDATA ccs = { hContact, PSR_CONTACTS, 0, (LPARAM)&dbei }; return (int)ProtoCallService(m_szModuleName, PSR_CONTACTS, 0, (LPARAM)&ccs); } @@ -181,9 +181,9 @@ struct DEFAULT_PROTO_INTERFACE : public PROTO_INTERFACE return ProtoCallService(m_szModuleName, PSR_FILE, 0, (LPARAM)&ccs); } - MEVENT RecvMsg(MCONTACT hContact, PROTORECVEVENT* evt) override + MEVENT RecvMsg(MCONTACT hContact, DB::EventInfo &dbei) override { - CCSDATA ccs = { hContact, PSR_MESSAGE, 0, (LPARAM)evt }; + CCSDATA ccs = { hContact, PSR_MESSAGE, 0, (LPARAM)&dbei }; INT_PTR res = ProtoCallService(m_szModuleName, PSR_MESSAGE, 0, (LPARAM)&ccs); return (res == CALLSERVICE_NOTFOUND) ? -1 : (int)res; } diff --git a/src/mir_app/src/protocols.cpp b/src/mir_app/src/protocols.cpp index 0bf7bcf8da..563d9272e7 100644 --- a/src/mir_app/src/protocols.cpp +++ b/src/mir_app/src/protocols.cpp @@ -169,18 +169,14 @@ MIR_APP_DLL(const char*) Proto_GetUniqueId(const char *szModuleName) ///////////////////////////////////////////////////////////////////////////////////////// // Basic core services -MIR_APP_DLL(MEVENT) Proto_AuthRecv(const char *szProtoName, PROTORECVEVENT *pcre) +MIR_APP_DLL(MEVENT) Proto_AuthRecv(const char *szProtoName, DB::EventInfo &dbei) { - if (szProtoName == nullptr || pcre == nullptr) + if (szProtoName == nullptr) return 0; - DBEVENTINFO dbei = {}; dbei.szModule = (char*)szProtoName; - dbei.timestamp = pcre->timestamp; - dbei.flags = DBEF_UTF | pcre->flags & (PREF_CREATEREAD ? DBEF_READ : 0); + dbei.flags |= DBEF_UTF; dbei.eventType = EVENTTYPE_AUTHREQUEST; - dbei.cbBlob = pcre->lParam; - dbei.pBlob = pcre->szMessage; return db_event_add(0, &dbei); } @@ -390,7 +386,7 @@ INT_PTR CallContactServiceInt(MCONTACT hContact, const char *szModule, const cha case 2: return (INT_PTR)ppi->AddToListByEvent(LOWORD(wParam), HIWORD(wParam), (MEVENT)lParam); case 3: return (INT_PTR)ppi->Authorize((MEVENT)wParam); case 4: return (INT_PTR)ppi->AuthDeny((MEVENT)wParam, (wchar_t *)lParam); - case 5: return (INT_PTR)ppi->AuthRecv(hContact, (PROTORECVEVENT *)lParam); + case 5: return (INT_PTR)ppi->AuthRecv(hContact, *(DB::EventInfo*)lParam); case 6: return (INT_PTR)ppi->AuthRequest(hContact, (wchar_t *)lParam); case 8: return (INT_PTR)ppi->FileAllow(hContact, (HANDLE)wParam, (wchar_t *)lParam); case 9: return (INT_PTR)ppi->FileCancel(hContact, (HANDLE)wParam); @@ -413,9 +409,9 @@ INT_PTR CallContactServiceInt(MCONTACT hContact, const char *szModule, const cha } case 18: return (INT_PTR)ppi->SearchAdvanced((HWND)lParam); case 19: return (INT_PTR)ppi->CreateExtendedSearchUI((HWND)lParam); - case 20: return (INT_PTR)ppi->RecvContacts(hContact, (PROTORECVEVENT *)lParam); + case 20: return (INT_PTR)ppi->RecvContacts(hContact, *(DB::EventInfo *)lParam); case 21: return (INT_PTR)ppi->RecvFile(hContact, *(DB::FILE_BLOB *)wParam, *(DB::EventInfo *)lParam); - case 22: return (INT_PTR)ppi->RecvMsg(hContact, (PROTORECVEVENT *)lParam); + case 22: return (INT_PTR)ppi->RecvMsg(hContact, *(DB::EventInfo *)lParam); case 23: return (INT_PTR)ppi->SendContacts(hContact, LOWORD(wParam), HIWORD(wParam), (MCONTACT *)lParam); case 24: return (INT_PTR)ppi->SendFile(hContact, (wchar_t *)wParam, (wchar_t **)lParam); case 25: -- cgit v1.2.3