コード例 #1
0
ファイル: svcs_srmm.cpp プロジェクト: Ganster41/miranda-ng
void InitSRMMIcons()
{
	// add icon to srmm status icons
	StatusIconData sid = { sizeof(sid) };
	sid.szModule = MODULENAME;
	sid.flags = MBF_DISABLED|MBF_HIDDEN;

	// Native
	sid.dwId = MODE_NATIVE;
	sid.hIcon = mode2icon(MODE_NATIVE|SECURED,3);
	sid.hIconDisabled = mode2icon(MODE_NATIVE,3);
	sid.szTooltip = LPGEN("SecureIM [Native]");
	Srmm_AddIcon(&sid);

	// PGP
	sid.dwId = MODE_PGP;
	sid.hIcon = mode2icon(MODE_PGP|SECURED,3);
	sid.hIconDisabled = mode2icon(MODE_PGP,3);
	sid.szTooltip = LPGEN("SecureIM [PGP]");
	Srmm_AddIcon(&sid);
	// GPG
	sid.dwId = MODE_GPG;
	sid.hIcon = mode2icon(MODE_GPG|SECURED,3);
	sid.hIconDisabled = mode2icon(MODE_GPG,3);
	sid.szTooltip = LPGEN("SecureIM [GPG]");
	Srmm_AddIcon(&sid);
	// RSAAES
	sid.dwId = MODE_RSAAES;
	sid.hIcon = mode2icon(MODE_RSAAES|SECURED,3);
	sid.hIconDisabled = mode2icon(MODE_RSAAES,3);
	sid.szTooltip = LPGEN("SecureIM [RSA/AES]");
	Srmm_AddIcon(&sid);

	// hook the window events so that we can can change the status of the icon
	HookEvent(ME_MSG_WINDOWEVENT, onWindowEvent);
	HookEvent(ME_MSG_ICONPRESSED, onIconPressed);
}
コード例 #2
0
int __cdecl onRebuildContactMenu(WPARAM wParam,LPARAM lParam)
{
	HANDLE hContact = (HANDLE)wParam;
	BOOL bMC = isProtoMetaContacts(hContact);
	if (bMC ) hContact = getMostOnline(hContact); // возьмем тот, через который пойдет сообщение
	pUinKey ptr = getUinKey(hContact);
	int i;
	CLISTMENUITEM mi = { sizeof(mi) };

	ShowStatusIconNotify(hContact);

	// check offline/online
	if (!ptr) {
		// hide menu bars
		for (i=0; i < SIZEOF(g_hMenu); i++)
			Menu_ShowItem(g_hMenu[i], false);
		return 0;
	}

	bool isSecureProto = isSecureProtocol(hContact);
	bool isPGP = isContactPGP(hContact);
	bool isGPG = isContactGPG(hContact);
	bool isSecured = (isContactSecured(hContact)&SECURED) != 0;
	bool isChat = isChatRoom(hContact);
	bool isMiranda = isClientMiranda(hContact);

	// hide all menu bars
	for (i=0; i < SIZEOF(g_hMenu); i++)
		Menu_ShowItem(g_hMenu[i], false);

	if (isSecureProto && !isChat && isMiranda && 
	    (ptr->mode == MODE_NATIVE || ptr->mode == MODE_RSAAES)) {
		// Native/RSAAES
		mi.flags = CMIM_FLAGS | CMIF_NOTOFFLINE | CMIM_ICON;
		if (!isSecured) {
			// create secureim connection
			mi.hIcon = mode2icon(ptr->mode|SECURED,2);
			Menu_ModifyItem(g_hMenu[0], &mi);
		}
		else {
			// disable secureim connection
			mi.hIcon = mode2icon(ptr->mode,2);
			Menu_ModifyItem(g_hMenu[1], &mi);
		}
		// set status menu
		if (bSCM && !bMC && (!isSecured || ptr->mode == MODE_PGP || ptr->mode == MODE_GPG)) {

			mi.flags = CMIM_FLAGS | CMIM_NAME | CMIM_ICON;
			mi.hIcon = g_hICO[ICO_ST_DIS+ptr->status];
			mi.pszName = (LPSTR)sim312[ptr->status];
			Menu_ModifyItem(g_hMenu[2], &mi);

			mi.flags = CMIM_FLAGS | CMIM_ICON;
			for (i=0;i<=(ptr->mode == MODE_RSAAES?1:2);i++) {
				mi.hIcon = (i == ptr->status) ? g_hICO[ICO_ST_DIS+ptr->status] : NULL;
				Menu_ModifyItem(g_hMenu[3+i], &mi);
			}
		}
	}
	else if (isSecureProto && !isChat && (ptr->mode == MODE_PGP || ptr->mode == MODE_GPG)) {
		// PGP, GPG
		if (ptr->mode == MODE_PGP && bPGPloaded)
			if ((bPGPkeyrings || bPGPprivkey) && !isGPG)
				Menu_ShowItem(g_hMenu[isPGP+6], true);

		if (ptr->mode == MODE_GPG && bGPGloaded)
			if (bGPGkeyrings && !isPGP)
				Menu_ShowItem(g_hMenu[isGPG+8], true);
	}
	if (isSecureProto && !isChat && isMiranda) {
		// set mode menu
		if (bMCM && !bMC && (!isSecured || ptr->mode == MODE_PGP || ptr->mode == MODE_GPG)) {
			mi.flags = CMIM_FLAGS | CMIM_NAME | CMIM_ICON;
			mi.hIcon = g_hICO[ICO_OV_NAT+ptr->mode];
			mi.pszName = (LPSTR)sim311[ptr->mode];
			Menu_ModifyItem(g_hMenu[10], &mi);

			mi.flags = CMIM_FLAGS | CMIM_ICON;
			for (i=0;i<MODE_CNT;i++) {
				if (i == MODE_PGP && ptr->mode != MODE_PGP && !bPGP ) continue;
				if (i == MODE_GPG && ptr->mode != MODE_GPG && !bGPG ) continue;
				mi.hIcon = (i == ptr->mode) ? g_hICO[ICO_ST_ENA] : NULL;
				Menu_ModifyItem(g_hMenu[11+i], &mi);
			}
		}
	}

	return 0;
}
コード例 #3
0
ファイル: main.cpp プロジェクト: aventado/secureimplugin
int __cdecl onModulesLoaded(WPARAM wParam,LPARAM lParam) {

#if defined(_DEBUG) || defined(NETLIB_LOG)
    InitNetlib();
    Sent_NetLog("onModuleLoaded begin");
#endif

    bMetaContacts = ServiceExists(MS_MC_GETMETACONTACT)!=0;
    bPopupExists = ServiceExists(MS_POPUP_ADDPOPUPEX)!=0;
    bPopupUnicode = ServiceExists(MS_POPUP_ADDPOPUPW)!=0;

    g_hFolders = FoldersRegisterCustomPath(szModuleName, "Icons", MIRANDA_PATH"\\icons");
    if( g_hFolders==(HANDLE)CALLSERVICE_NOTFOUND ) g_hFolders = 0;

    InitIcons();
    GetFlags();

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("rsa_init");
#endif
	{ // RSA/AES
		rsa_init(&exp,&imp);

		DBVARIANT dbv;
		dbv.type = DBVT_BLOB;

		if( DBGetContactSetting(0,szModuleName,"rsa_priv",&dbv) == 0 ) {
			exp->rsa_set_keypair(CPP_MODE_RSA_4096,dbv.pbVal,dbv.cpbVal);
			DBFreeVariant(&dbv);
			rsa_4096=1;
		}
		else
		if( DBGetContactSetting(0,szModuleName,"rsa_priv_4096",&dbv) == 0 ) {
			exp->rsa_set_keypair(CPP_MODE_RSA_4096|CPP_MODE_RSA_BER,dbv.pbVal,dbv.cpbVal);
			DBFreeVariant(&dbv);

			char priv_key[4096]; int priv_len;
			char pub_key[4096]; int pub_len;

			DBCONTACTWRITESETTING cws;
			cws.szModule = szModuleName;
			cws.value.type = DBVT_BLOB;

			exp->rsa_get_keypair(CPP_MODE_RSA_4096,(PBYTE)&priv_key,&priv_len,(PBYTE)&pub_key,&pub_len);

			cws.szSetting = "rsa_priv";
			cws.value.pbVal = (PBYTE)&priv_key;
			cws.value.cpbVal = priv_len;
			CallService(MS_DB_CONTACT_WRITESETTING, (WPARAM)0, (LPARAM)&cws);

			cws.szSetting = "rsa_pub";
			cws.value.pbVal = (PBYTE)&pub_key;
			cws.value.cpbVal = pub_len;
			CallService(MS_DB_CONTACT_WRITESETTING, (WPARAM)0, (LPARAM)&cws);

			DBDeleteContactSetting(0, szModuleName, "rsa_priv_2048");
			DBDeleteContactSetting(0, szModuleName, "rsa_pub_2048");
//			DBDeleteContactSetting(0, szModuleName, "rsa_priv_4096");
//			DBDeleteContactSetting(0, szModuleName, "rsa_pub_4096");

			rsa_4096=1;
		}	

		if( !rsa_4096 ) {
			unsigned int tID;
			CloseHandle( (HANDLE) _beginthreadex(NULL, 0, sttGenerateRSA, NULL, 0, &tID) );
		}

		exp->rsa_set_timeout( DBGetContactSettingWord(0,szModuleName,"ket",10) );
	}

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("pgp_init");
#endif
	bPGP = DBGetContactSettingByte(0, szModuleName, "pgp", 0);
	if(bPGP) { //PGP
	    bPGPloaded = pgp_init();
   	    bUseKeyrings = DBGetContactSettingByte(0,szModuleName,"ukr",1);
   	    LPSTR priv = myDBGetStringDecode(0,szModuleName,"pgpPrivKey");
   	    if(priv) {
	   	    bPGPprivkey = true;
		    if(bPGPloaded)
			pgp_set_priv_key(priv);
	   	    mir_free(priv);
	    }// if(priv)
            if(bPGPloaded && bUseKeyrings) {
    		char PubRingPath[MAX_PATH], SecRingPath[MAX_PATH];
    		PubRingPath[0]='\0'; SecRingPath[0]='\0';
    		if(pgp_get_version()<0x02000000) { // 6xx
    		    bPGPkeyrings = pgp_open_keyrings(PubRingPath,SecRingPath);
		}
        	else {
        		LPSTR tmp;
        		tmp = myDBGetString(0,szModuleName,"pgpPubRing");
        		if(tmp) {
        			strncpy(PubRingPath,tmp,sizeof(PubRingPath));
        			mir_free(tmp);
        		}
        		tmp = myDBGetString(0,szModuleName,"pgpSecRing");
        		if(tmp) {
        			strncpy(SecRingPath,tmp,sizeof(SecRingPath));
        			mir_free(tmp);
        		}
        	   	if(PubRingPath[0] && SecRingPath[0]) {
        			bPGPkeyrings = pgp_open_keyrings(PubRingPath,SecRingPath);
        			if(bPGPkeyrings) {
        				DBWriteContactSettingString(0,szModuleName,"pgpPubRing",PubRingPath);
        				DBWriteContactSettingString(0,szModuleName,"pgpSecRing",SecRingPath);
        			}
        			else {
        				DBDeleteContactSetting(0, szModuleName, "pgpPubRing");
        				DBDeleteContactSetting(0, szModuleName, "pgpSecRing");
        			}
        		}
    		}
    	    }// if(bPGPloaded && bUseKeyrings)
   	}// if(bPGP)

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("gpg_init");
#endif
	bGPG = DBGetContactSettingByte(0, szModuleName, "gpg", 0);
	if(bGPG) { //GPG

		LPSTR tmp;

		bGPGloaded = gpg_init();

   		char gpgexec[MAX_PATH], gpghome[MAX_PATH];
   		gpgexec[0]='\0'; gpghome[0]='\0';

		tmp = myDBGetString(0,szModuleName,"gpgExec");
		if(tmp) {
			strncpy(gpgexec,tmp,sizeof(gpgexec));
			mir_free(tmp);
		}
		tmp = myDBGetString(0,szModuleName,"gpgHome");
		if(tmp) {
			strncpy(gpghome,tmp,sizeof(gpghome));
			mir_free(tmp);
		}

		if(DBGetContactSettingByte(0, szModuleName, "gpgLogFlag",0)) {
			tmp = myDBGetString(0,szModuleName,"gpgLog");
			if(tmp) {
				gpg_set_log(tmp);
				mir_free(tmp);
			}
		}

		if(DBGetContactSettingByte(0, szModuleName, "gpgTmpFlag",0)) {
			tmp = myDBGetString(0,szModuleName,"gpgTmp");
			if(tmp) {
				gpg_set_tmp(tmp);
				mir_free(tmp);
			}
		}

		bGPGkeyrings = gpg_open_keyrings(gpgexec,gpghome);
		if(bGPGkeyrings) {
			DBWriteContactSettingString(0,szModuleName,"gpgExec",gpgexec);
			DBWriteContactSettingString(0,szModuleName,"gpgHome",gpghome);
		}
		else {
			DBDeleteContactSetting(0, szModuleName, "gpgExec");
			DBDeleteContactSetting(0, szModuleName, "gpgHome");
		}

		bSavePass = DBGetContactSettingByte(0,szModuleName,"gpgSaveFlag",0);
		if(bSavePass) {
			tmp = myDBGetString(0,szModuleName,"gpgSave");
			if(tmp) {
				gpg_set_passphrases(tmp);
				mir_free(tmp);
			}
		}
	}

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("loadContactList");
#endif
	loadContactList();

	// add new skin sound
	SkinAddNewSound("IncomingSecureMessage","Incoming Secure Message","Sounds\\iSecureMessage.wav");
	SkinAddNewSound("OutgoingSecureMessage","Outgoing Secure Message","Sounds\\oSecureMessage.wav");

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("init extra icons");
#endif
	// init extra icons
	for(int i=0;i<1+MODE_CNT*IEC_CNT;i++) {
		g_IEC[i].cbSize = sizeof(g_IEC[i]);
		g_IEC[i].ColumnType = bADV;
		g_IEC[i].hImage = (HANDLE)-1;
	}

	// build extra imagelist
	//onExtraImageListRebuilding(0,0);

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("hook events");
#endif
	AddHookFunction(ME_CLIST_PREBUILDCONTACTMENU, onRebuildContactMenu);
//	g_hMC = HookEvent(ME_MC_SUBCONTACTSCHANGED, onMC);

	if( ServiceExists(MS_EXTRAICON_REGISTER) ) {
		g_hCLIcon = ExtraIcon_Register(szModuleName, Translate("SecureIM status"), "sim_cm_est",
						(MIRANDAHOOK)onExtraImageListRebuilding,
						(MIRANDAHOOK)onExtraImageApplying);
	}
	else {
		AddHookFunction(ME_CLIST_EXTRA_LIST_REBUILD, onExtraImageListRebuilding);
		AddHookFunction(ME_CLIST_EXTRA_IMAGE_APPLY, onExtraImageApplying);
	}

	// hook init options
	AddHookFunction(ME_OPT_INITIALISE, onRegisterOptions);
	if(bPopupExists)
	AddHookFunction(ME_OPT_INITIALISE, onRegisterPopOptions);
	AddHookFunction(ME_PROTO_ACK, onProtoAck);
	AddHookFunction(ME_DB_CONTACT_SETTINGCHANGED, onContactSettingChanged);
	AddHookFunction(ME_DB_CONTACT_ADDED, onContactAdded);
	AddHookFunction(ME_DB_CONTACT_DELETED, onContactDeleted);

	// hook message transport
	AddProtoServiceFunction(PSR_MESSAGE, onRecvMsg);
	AddProtoServiceFunction(PSS_MESSAGE, (MIRANDASERVICE)onSendMsg);
	AddProtoServiceFunction(PSS_MESSAGE"W", (MIRANDASERVICE)onSendMsgW);
	AddProtoServiceFunction(PSS_FILE, (MIRANDASERVICE)onSendFile);

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("create Native/RSA menu");
#endif
	// create a menu item for creating a secure im connection to the user.
	g_hMenu[0] = AddMenuItem(sim301,110000,g_hICO[ICO_CM_EST],MODULENAME"/SIM_EST",CMIF_NOTOFFLINE);
	g_hMenu[1] = AddMenuItem(sim302,110001,g_hICO[ICO_CM_DIS],MODULENAME"/SIM_DIS",CMIF_NOTOFFLINE);

	if(ServiceExists(MS_CLIST_ADDSUBGROUPMENUITEM)) {
	    g_hMenu[2] = AddMenuItem(sim312[0],110002,NULL,NULL,CMIF_ROOTPOPUP);
	    g_hMenu[3] = AddSubItem(g_hMenu[2],sim232[0],110003,110002,MODULENAME"/SIM_ST_DIS");
	    g_hMenu[4] = AddSubItem(g_hMenu[2],sim232[1],110004,110002,MODULENAME"/SIM_ST_ENA");
	    g_hMenu[5] = AddSubItem(g_hMenu[2],sim232[2],110005,110002,MODULENAME"/SIM_ST_TRY");
	}
	else {
	    g_hMenu[2] = 0;
	    g_hMenu[3] = AddMenuItem(sim232[0],110003,NULL,MODULENAME"/SIM_ST_DIS");
	    g_hMenu[4] = AddMenuItem(sim232[1],110004,NULL,MODULENAME"/SIM_ST_ENA");
	    g_hMenu[5] = AddMenuItem(sim232[2],110005,NULL,MODULENAME"/SIM_ST_TRY");
	}

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("create PGP/GPG menu");
#endif
	HICON icon;
	if( bPGPloaded ) {
		icon=mode2icon(MODE_PGP|SECURED,2);
		g_hMenu[6] = AddMenuItem(sim306,110006,icon,MODULENAME"/PGP_SET",0);
		icon=mode2icon(MODE_PGP,2);
		g_hMenu[7] = AddMenuItem(sim307,110007,icon,MODULENAME"/PGP_DEL",0);
	}

    	if(bGPGloaded) {
		icon=mode2icon(MODE_GPG|SECURED,2);
		g_hMenu[8] = AddMenuItem(sim308,110008,icon,MODULENAME"/GPG_SET",0);
		icon=mode2icon(MODE_GPG,2);
		g_hMenu[9] = AddMenuItem(sim309,110009,icon,MODULENAME"/GPG_DEL",0);
    	}

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("create Mode menu");
#endif
	if(ServiceExists(MS_CLIST_ADDSUBGROUPMENUITEM)) {
	    g_hMenu[10] = AddMenuItem(sim311[0],110010,NULL,NULL,CMIF_ROOTPOPUP);
	    g_hMenu[11] = AddSubItem(g_hMenu[10],sim231[0],110011,110010,MODULENAME"/MODE_NAT");
	    g_hMenu[12] = AddSubItem(g_hMenu[10],sim231[1],110012,110010,MODULENAME"/MODE_PGP");
	    g_hMenu[13] = AddSubItem(g_hMenu[10],sim231[2],110013,110010,MODULENAME"/MODE_GPG");
	    g_hMenu[14] = AddSubItem(g_hMenu[10],sim231[3],110014,110010,MODULENAME"/MODE_RSA");
	}
	else {
	    g_hMenu[10] = 0;
	    g_hMenu[11] = AddMenuItem(sim231[0],110011,NULL,MODULENAME"/MODE_NAT");
	    g_hMenu[12] = AddMenuItem(sim231[1],110012,NULL,MODULENAME"/MODE_PGP");
	    g_hMenu[13] = AddMenuItem(sim231[2],110013,NULL,MODULENAME"/MODE_GPG");
	    g_hMenu[14] = AddMenuItem(sim231[3],110014,NULL,MODULENAME"/MODE_RSA");
	}
	
    	// updater plugin support
        if(ServiceExists(MS_UPDATE_REGISTERFL)) {
		CallService(MS_UPDATE_REGISTERFL, (WPARAM)2445, (LPARAM)&pluginInfo);
	}

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("create srmm icons");
#endif
	// add icon to srmm status icons
	if(ServiceExists(MS_MSG_ADDICON)) {

		StatusIconData sid;
		memset(&sid,0,sizeof(sid));
		sid.cbSize = sizeof(sid);
		sid.szModule = (char*)szModuleName;
		sid.flags = MBF_DISABLED|MBF_HIDDEN;
		// Native
		sid.dwId = MODE_NATIVE;
		sid.hIcon = mode2icon(MODE_NATIVE|SECURED,3);
		sid.hIconDisabled = mode2icon(MODE_NATIVE,3);
		sid.szTooltip = Translate("SecureIM [Native]");
		CallService(MS_MSG_ADDICON, 0, (LPARAM)&sid);
		// PGP
		sid.dwId = MODE_PGP;
		sid.hIcon = mode2icon(MODE_PGP|SECURED,3);
		sid.hIconDisabled = mode2icon(MODE_PGP,3);
		sid.szTooltip = Translate("SecureIM [PGP]");
		CallService(MS_MSG_ADDICON, 0, (LPARAM)&sid);
		// GPG
		sid.dwId = MODE_GPG;
		sid.hIcon = mode2icon(MODE_GPG|SECURED,3);
		sid.hIconDisabled = mode2icon(MODE_GPG,3);
		sid.szTooltip = Translate("SecureIM [GPG]");
		CallService(MS_MSG_ADDICON, 0, (LPARAM)&sid);
		// RSAAES
		sid.dwId = MODE_RSAAES;
		sid.hIcon = mode2icon(MODE_RSAAES|SECURED,3);
		sid.hIconDisabled = mode2icon(MODE_RSAAES,3);
		sid.szTooltip = Translate("SecureIM [RSA/AES]");
		CallService(MS_MSG_ADDICON, 0, (LPARAM)&sid);

		// hook the window events so that we can can change the status of the icon
		AddHookFunction(ME_MSG_WINDOWEVENT, onWindowEvent);
		AddHookFunction(ME_MSG_ICONPRESSED, onIconPressed);
	}

#if defined(_DEBUG) || defined(NETLIB_LOG)
	Sent_NetLog("onModuleLoaded end");
#endif
	return 0;
}