From 3cbb1a2bf5892b58af4f344ee4648c8139a3ea8b Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sat, 28 Aug 2010 10:19:59 +0300 Subject: basic metacontacts support code --- messages.cpp | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'messages.cpp') diff --git a/messages.cpp b/messages.cpp index 10be19f..ef4ddea 100644 --- a/messages.cpp +++ b/messages.cpp @@ -20,6 +20,9 @@ wstring new_key; HANDLE new_key_hcnt = NULL; +BOOL isProtoMetaContacts(HANDLE hContact); +HANDLE getMostOnline(HANDLE hContact); + int RecvMsgSvc(WPARAM w, LPARAM l) { CCSDATA *ccs = (CCSDATA*)l; @@ -32,6 +35,10 @@ int RecvMsgSvc(WPARAM w, LPARAM l) if (!msg) return CallService(MS_PROTO_CHAINRECV, w, l); BOOL unicode = (BOOL)(pre->flags&PREF_UNICODE); + HANDLE hContact = ccs->hContact; + if(isProtoMetaContacts(hContact)) + hContact = getMostOnline(hContact); + { //check for gpg related data wchar_t *tmp = mir_utf8decodeW(msg); @@ -72,7 +79,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l) s2 += _tcslen(_T("-----END PGP PRIVATE KEY BLOCK-----")); } new_key.append(str.substr(s1,s2-s1)); - new_key_hcnt = ccs->hContact; + new_key_hcnt = hContact; ShowNewKeyDialog(); return CallService(MS_PROTO_CHAINRECV, w, l); } @@ -83,30 +90,30 @@ int RecvMsgSvc(WPARAM w, LPARAM l) void setSrmmIcon(HANDLE); void setClistIcon(HANDLE); bool isContactHaveKey(HANDLE hContact); - if(!DBGetContactSettingByte(ccs->hContact, szGPGModuleName, "GPGEncryption", 0)) + if(!DBGetContactSettingByte(hContact, szGPGModuleName, "GPGEncryption", 0)) { if(MessageBox(0, _T("We received encrypted message from contact with encryption turned off.\nDo you want turn on encryption for this contact ?"), _T("Warning"), MB_YESNO) == IDYES) { - if(!isContactHaveKey(ccs->hContact)) + if(!isContactHaveKey(hContact)) { void ShowLoadPublicKeyDialog(); extern map user_data; extern int item_num; item_num = 0; //black magic here - user_data[1] = ccs->hContact; + user_data[1] = hContact; ShowLoadPublicKeyDialog(); } else { - DBWriteContactSettingByte(ccs->hContact, szGPGModuleName, "GPGEncryption", 1); - setSrmmIcon(ccs->hContact); - setClistIcon(ccs->hContact); + DBWriteContactSettingByte(hContact, szGPGModuleName, "GPGEncryption", 1); + setSrmmIcon(hContact); + setClistIcon(hContact); } - if(isContactHaveKey(ccs->hContact)) + if(isContactHaveKey(hContact)) { - DBWriteContactSettingByte(ccs->hContact, szGPGModuleName, "GPGEncryption", 1); - setSrmmIcon(ccs->hContact); - setClistIcon(ccs->hContact); + DBWriteContactSettingByte(hContact, szGPGModuleName, "GPGEncryption", 1); + setSrmmIcon(hContact); + setClistIcon(hContact); } } else if(MessageBox(0, _T("Do you want try to decrypt encrypted message ?"), _T("Warning"), MB_YESNO) == IDNO) @@ -286,7 +293,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l) } } } - if(DBGetContactSettingByte(ccs->hContact, szGPGModuleName, "GPGEncryption", 0)) + if(DBGetContactSettingByte(hContact, szGPGModuleName, "GPGEncryption", 0)) { wchar_t *tmp = mir_utf8decodeW(msg); wstring str = tmp; @@ -312,6 +319,9 @@ int SendMsgSvc(WPARAM w, LPARAM l) if (!msg) return CallService(MS_PROTO_CHAINSEND, w, l); BOOL unicode = (BOOL)(ccs->wParam&PREF_UNICODE); + HANDLE hContact = ccs->hContact; + if(isProtoMetaContacts(hContact)) + hContact = getMostOnline(hContact); { //encrypt data here wchar_t *tmp = mir_utf8decodeW(msg); @@ -323,16 +333,16 @@ int SendMsgSvc(WPARAM w, LPARAM l) wstring cmd; wstring path; extern bool bJabberAPI, bIsMiranda09; - char *tmp = UniGetContactSettingUtf(ccs->hContact, szGPGModuleName, "KeyID", ""); + char *tmp = UniGetContactSettingUtf(hContact, szGPGModuleName, "KeyID", ""); if(strlen(tmp) < 2) { mir_free(tmp); - HistoryLog(ccs->hContact, "Failed to encrypt message with GPG", EVENTTYPE_MESSAGE, DBEF_SENT); + HistoryLog(hContact, "Failed to encrypt message with GPG", EVENTTYPE_MESSAGE, DBEF_SENT); return CallService(MS_PROTO_CHAINSEND, w, l); } if(!bJabberAPI || !bIsMiranda09) cmd += _T("--comment \"\" --no-version "); - if(DBGetContactSettingByte(ccs->hContact, szGPGModuleName, "bAlwaysTrust", 0)) + if(DBGetContactSettingByte(hContact, szGPGModuleName, "bAlwaysTrust", 0)) cmd += _T("--trust-model always "); cmd += _T("--batch --yes -e -a -r "); TCHAR *tmp2 = mir_a2t(tmp); @@ -381,7 +391,7 @@ int SendMsgSvc(WPARAM w, LPARAM l) out.clear(); if(MessageBox(0, _T("We trying to encrypt with untrusted key, do you want to trust this key permanently ?"), _T("Warning"), MB_YESNO) == IDYES) { - DBWriteContactSettingByte(ccs->hContact, szGPGModuleName, "bAlwaysTrust", 1); + DBWriteContactSettingByte(hContact, szGPGModuleName, "bAlwaysTrust", 1); cmd.insert(0, _T("--trust-model always ")); gpg_execution_params params; pxResult result; @@ -423,14 +433,14 @@ int SendMsgSvc(WPARAM w, LPARAM l) DeleteFile(path.c_str()); if(!str.length()) { - HistoryLog(ccs->hContact, "Failed to encrypt message with GPG", EVENTTYPE_MESSAGE, DBEF_SENT); + HistoryLog(hContact, "Failed to encrypt message with GPG", EVENTTYPE_MESSAGE, DBEF_SENT); return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs); } mir_free((void**)ccs->lParam); char *utf = mir_u2a(str.c_str()); ccs->lParam = (LPARAM)utf; if(bAppendTags) - DBWriteContactSettingByte(ccs->hContact, szGPGModuleName, "MsgsForTagging", DBGetContactSettingByte(ccs->hContact, szGPGModuleName, "MsgsForTagging", 0) + 1); + DBWriteContactSettingByte(hContact, szGPGModuleName, "MsgsForTagging", DBGetContactSettingByte(ccs->hContact, szGPGModuleName, "MsgsForTagging", 0) + 1); } } ccs->wParam&=~PREF_UNICODE; @@ -440,6 +450,8 @@ int SendMsgSvc(WPARAM w, LPARAM l) int HookSendMsg(WPARAM w, LPARAM l) { HANDLE hContact = (HANDLE)w; + if(isProtoMetaContacts(hContact)) + hContact = getMostOnline(hContact); if(!DBGetContactSettingByte(hContact, szGPGModuleName, "GPGEncryption", 0)) return 0; -- cgit v1.2.3