summaryrefslogtreecommitdiff
path: root/plugins/SecureIM/src/svcs_menu.cpp
diff options
context:
space:
mode:
authorVadim Dashevskiy <watcherhd@gmail.com>2012-07-23 13:49:28 +0000
committerVadim Dashevskiy <watcherhd@gmail.com>2012-07-23 13:49:28 +0000
commita9580df150d799246eaecbf3c1fb5cecf9f8ab49 (patch)
treece046b1cd432d65718c9f6af80521d533ce6d4ca /plugins/SecureIM/src/svcs_menu.cpp
parent60338d55bb73d0c45b6e092703c4bb88a3c49755 (diff)
SecureIM, SeenPlugin, SendSS, Sessions: changed folder structure
git-svn-id: http://svn.miranda-ng.org/main/trunk@1122 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/SecureIM/src/svcs_menu.cpp')
-rw-r--r--plugins/SecureIM/src/svcs_menu.cpp232
1 files changed, 232 insertions, 0 deletions
diff --git a/plugins/SecureIM/src/svcs_menu.cpp b/plugins/SecureIM/src/svcs_menu.cpp
new file mode 100644
index 0000000000..310d367e1b
--- /dev/null
+++ b/plugins/SecureIM/src/svcs_menu.cpp
@@ -0,0 +1,232 @@
+#include "commonheaders.h"
+
+
+INT_PTR __cdecl Service_IsContactSecured(WPARAM wParam, LPARAM lParam) {
+
+ return (isContactSecured((HANDLE)wParam)&SECURED) || isContactPGP((HANDLE)wParam) || isContactGPG((HANDLE)wParam);
+}
+
+
+INT_PTR __cdecl Service_CreateIM(WPARAM wParam,LPARAM lParam){
+ if (!CallService(MS_PROTO_ISPROTOONCONTACT, (WPARAM)wParam, (LPARAM)szModuleName))
+ CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)wParam, (LPARAM)szModuleName);
+// WPARAM flags = 0;
+// HANDLE hMetaContact = getMetaContact((HANDLE)wParam);
+// if ( hMetaContact ) {
+// wParam = (WPARAM)hMetaContact;
+// flags = PREF_METANODB;
+// }
+ CallContactService((HANDLE)wParam,PSS_MESSAGE,(WPARAM)PREF_METANODB,(LPARAM)SIG_INIT);
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_DisableIM(WPARAM wParam,LPARAM lParam) {
+// WPARAM flags = 0;
+// HANDLE hMetaContact = getMetaContact((HANDLE)wParam);
+// if ( hMetaContact ) {
+// wParam = (WPARAM)hMetaContact;
+// flags = PREF_METANODB;
+// }
+ CallContactService((HANDLE)wParam,PSS_MESSAGE,(WPARAM)PREF_METANODB,(LPARAM)SIG_DEIN);
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_Status(WPARAM wParam, LPARAM lParam) {
+
+ switch(--lParam) {
+ case STATUS_DISABLED:
+ case STATUS_ENABLED:
+ case STATUS_ALWAYSTRY:
+ pUinKey ptr = getUinKey((HANDLE)wParam);
+ if(ptr) {
+ ptr->status=ptr->tstatus=(BYTE)lParam;
+ if(ptr->status==STATUS_ENABLED) DBDeleteContactSetting(ptr->hContact, szModuleName, "StatusID");
+ else DBWriteContactSettingByte(ptr->hContact, szModuleName, "StatusID", ptr->status);
+ }
+ break;
+ }
+
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_StatusDis(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Status(wParam,STATUS_DISABLED+1);
+}
+
+
+INT_PTR __cdecl Service_StatusEna(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Status(wParam,STATUS_ENABLED+1);
+}
+
+
+INT_PTR __cdecl Service_StatusTry(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Status(wParam,STATUS_ALWAYSTRY+1);
+}
+
+
+INT_PTR __cdecl Service_PGPdelKey(WPARAM wParam, LPARAM lParam) {
+
+ if(bPGPloaded) {
+ DBDeleteContactSetting((HANDLE)wParam, szModuleName, "pgp");
+ DBDeleteContactSetting((HANDLE)wParam, szModuleName, "pgp_mode");
+ DBDeleteContactSetting((HANDLE)wParam, szModuleName, "pgp_abbr");
+ }
+ {
+ pUinKey ptr = getUinKey((HANDLE)wParam);
+ cpp_delete_context(ptr->cntx); ptr->cntx=0;
+ }
+ ShowStatusIconNotify((HANDLE)wParam);
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_PGPsetKey(WPARAM wParam, LPARAM lParam) {
+
+ BOOL del = true;
+ if(bPGPloaded) {
+ if(bPGPkeyrings) {
+ char szKeyID[128]; szKeyID[0]='\0';
+ PVOID KeyID = pgp_select_keyid(GetForegroundWindow(),szKeyID);
+ if(szKeyID[0]) {
+ DBDeleteContactSetting((HANDLE)wParam,szModuleName,"pgp");
+ DBCONTACTWRITESETTING cws;
+ memset(&cws,0,sizeof(cws));
+ cws.szModule = szModuleName;
+ cws.szSetting = "pgp";
+ cws.value.type = DBVT_BLOB;
+ cws.value.pbVal = (LPBYTE)KeyID;
+ cws.value.cpbVal = pgp_size_keyid();
+ CallService(MS_DB_CONTACT_WRITESETTING,wParam,(LPARAM)&cws);
+ DBWriteContactSettingByte((HANDLE)wParam,szModuleName,"pgp_mode",0);
+ DBWriteContactSettingString((HANDLE)wParam,szModuleName,"pgp_abbr",szKeyID);
+ del = false;
+ }
+ }
+ else
+ if(bPGPprivkey) {
+ char KeyPath[MAX_PATH]; KeyPath[0]='\0';
+ if(ShowSelectKeyDlg(0,KeyPath)) {
+ char *publ = LoadKeys(KeyPath,false);
+ if(publ) {
+ DBDeleteContactSetting((HANDLE)wParam,szModuleName,"pgp");
+ myDBWriteStringEncode((HANDLE)wParam,szModuleName,"pgp",publ);
+ DBWriteContactSettingByte((HANDLE)wParam,szModuleName,"pgp_mode",1);
+ DBWriteContactSettingString((HANDLE)wParam,szModuleName,"pgp_abbr","(binary)");
+ mir_free(publ);
+ del = false;
+ }
+ }
+ }
+ }
+
+ if(del) Service_PGPdelKey(wParam,lParam);
+ else {
+ pUinKey ptr = getUinKey((HANDLE)wParam);
+ cpp_delete_context(ptr->cntx); ptr->cntx=0;
+ }
+ ShowStatusIconNotify((HANDLE)wParam);
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_GPGdelKey(WPARAM wParam, LPARAM lParam) {
+
+ if(bGPGloaded) {
+ DBDeleteContactSetting((HANDLE)wParam, szModuleName, "gpg");
+ }
+ {
+ pUinKey ptr = getUinKey((HANDLE)wParam);
+ cpp_delete_context(ptr->cntx); ptr->cntx=0;
+ }
+ ShowStatusIconNotify((HANDLE)wParam);
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_GPGsetKey(WPARAM wParam, LPARAM lParam) {
+
+ BOOL del = true;
+ if(bGPGloaded && bGPGkeyrings) {
+ char szKeyID[128]; szKeyID[0]='\0';
+ gpg_select_keyid(GetForegroundWindow(),szKeyID);
+ if(szKeyID[0]) {
+ DBWriteContactSettingString((HANDLE)wParam,szModuleName,"gpg",szKeyID);
+ del = false;
+ }
+ }
+
+ if(del) Service_GPGdelKey(wParam,lParam);
+ else {
+ pUinKey ptr = getUinKey((HANDLE)wParam);
+ cpp_delete_context(ptr->cntx); ptr->cntx=0;
+ }
+ ShowStatusIconNotify((HANDLE)wParam);
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_Mode(WPARAM wParam, LPARAM lParam) {
+
+ pUinKey ptr = getUinKey((HANDLE)wParam);
+
+ switch(--lParam) {
+ case MODE_NATIVE:
+ case MODE_RSAAES:
+ if ( isContactSecured((HANDLE)wParam)&SECURED ) {
+ msgbox(NULL, sim111, szModuleName, MB_OK);
+ return 0;
+ }
+ if ( lParam!=MODE_NATIVE && ptr->status>STATUS_ENABLED ) {
+ Service_Status(wParam,STATUS_ENABLED+1);
+ }
+ case MODE_PGP:
+ case MODE_GPG:
+ // нужно много проверок и отключение активного контекста если необходимо
+ if(ptr) {
+ if ( ptr->cntx ) {
+ cpp_delete_context(ptr->cntx);
+ ptr->cntx = 0;
+ ptr->keyLoaded = 0;
+ }
+ ptr->mode=(BYTE)lParam;
+ DBWriteContactSettingByte((HANDLE)wParam, szModuleName, "mode", (BYTE)lParam);
+ }
+ ShowStatusIcon((HANDLE)wParam);
+ break;
+ }
+
+ return 1;
+}
+
+
+INT_PTR __cdecl Service_ModeNative(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Mode(wParam,MODE_NATIVE+1);
+}
+
+
+INT_PTR __cdecl Service_ModePGP(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Mode(wParam,MODE_PGP+1);
+}
+
+
+INT_PTR __cdecl Service_ModeGPG(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Mode(wParam,MODE_GPG+1);
+}
+
+
+INT_PTR __cdecl Service_ModeRSAAES(WPARAM wParam, LPARAM lParam) {
+
+ return Service_Mode(wParam,MODE_RSAAES+1);
+}
+
+
+// EOF