From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- icqj_s7_sss_mod/init.c | 1069 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1069 insertions(+) create mode 100644 icqj_s7_sss_mod/init.c (limited to 'icqj_s7_sss_mod/init.c') diff --git a/icqj_s7_sss_mod/init.c b/icqj_s7_sss_mod/init.c new file mode 100644 index 0000000..3735d33 --- /dev/null +++ b/icqj_s7_sss_mod/init.c @@ -0,0 +1,1069 @@ +// ---------------------------------------------------------------------------80 +// ICQ plugin for Miranda Instant Messenger +// ________________________________________ +// +// Copyright © 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede +// Copyright © 2001,2002 Jon Keating, Richard Hughes +// Copyright © 2002,2003,2004 Martin Öberg, Sam Kothari, Robert Rainwater +// Copyright © 2004,2005,2006,2007 Joe Kucera +// Copyright © 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ----------------------------------------------------------------------------- +// +// File name : $Source$ +// Revision : $Revision: 62 $ +// Last change on : $Date: 2007-10-16 14:56:05 +0300 (Ð’Ñ‚, 16 окт 2007) $ +// Last change by : $Author: chaos.persei $ +// +// DESCRIPTION: +// +// Miranda init file - exported functions of plugin +// +// ----------------------------------------------------------------------------- + +#include "icqoscar.h" +#include "isee.h" + +#include "m_updater.h" + + +PLUGINLINK* pluginLink; +struct MM_INTERFACE mmi; +struct MD5_INTERFACE md5i; +HANDLE hHookUserInfoInit = NULL; +HANDLE hHookOptionInit = NULL; +HANDLE hHookUserMenu = NULL; +HANDLE hHookIdleEvent = NULL; +HANDLE hHookIconsChanged = NULL; +static HANDLE hUserMenuAddServ = NULL; +static HANDLE hUserMenuAuth = NULL; +static HANDLE hUserMenuGrant = NULL; +static HANDLE hUserMenuRevoke = NULL; +static HANDLE hUserMenuXStatus = NULL; +HANDLE hIconProtocol = NULL; +static HANDLE hIconMenuAuth = NULL; +static HANDLE hIconMenuGrant = NULL; +static HANDLE hIconMenuRevoke = NULL; +static HANDLE hIconMenuAddServ = NULL; +static HANDLE hUserMenuSetVis = NULL; +static HANDLE hUserMenuSetInvis = NULL; +static HANDLE hUserMenuIncognito = NULL; +static HANDLE hUserMenuSendtZer = NULL; +HANDLE hPopUpsList = NULL; +HANDLE hUserMenuStatus = NULL; + +extern HANDLE hServerConn; +CRITICAL_SECTION localSeqMutex; +CRITICAL_SECTION connectionHandleMutex; +HANDLE hsmsgrequest; +HANDLE hxstatuschanged; +HANDLE hxstatusiconchanged; +//popup settings +BOOL bPopUpService = FALSE; +BOOL bPopUpsEnabled = FALSE; +BOOL bSpamPopUp = FALSE; +BOOL bUnknownPopUp = FALSE; +BOOL bFoundPopUp = TRUE; +BOOL bScanPopUp = TRUE; +BOOL bClientChangePopUp = FALSE; +BOOL bVisPopUp = TRUE; +BOOL bPopUpForNotOnList = FALSE; +BOOL bPopSelfRem = TRUE; +BOOL bIgnoreCheckPop = TRUE; +BOOL bInfoRequestPopUp = FALSE; +BOOL bAuthPopUp = FALSE; +BOOL bXUpdaterPopUp = FALSE; +BOOL bUinPopup = FALSE; +//visibility variable +BYTE bVisibility = 0; +BOOL bIncognitoRequest = FALSE; +BOOL bIncognitoGlobal = FALSE; +BOOL bShowAuth = FALSE; +//BOOL bStealthRequest = FALSE; +BOOL bPSD = TRUE; +BYTE gbASD = 0; +BOOL bExcludePSD = FALSE; +BOOL bNoASD = TRUE; +BOOL bNoPSDForHidden = TRUE; +BOOL bNoStatusReply = FALSE; +//xstatus settings +BOOL bXstatusIconShow = TRUE; +//loging options +BOOL bLogSelfRemoveFile = FALSE; +BOOL bLogIgnoreCheckFile = FALSE; +BOOL bLogStatusCheckFile = FALSE; +BOOL bLogASDFile = FALSE; +BOOL bLogClientChangeFile = FALSE; +BOOL bLogAuthFile = FALSE; +BOOL bLogInfoRequestFile = FALSE; +BOOL bLogSelfRemoveHistory = FALSE; +BOOL bLogIgnoreCheckHistory = FALSE; +BOOL bLogStatusCheckHistory = FALSE; +BOOL bLogASDHistory = FALSE; +BOOL bLogClientChangeHistory = FALSE; +BOOL bLogAuthHistory = FALSE; +BOOL bLogInfoRequestHistory = FALSE; +BOOL bHcontactHistory = FALSE; +//ASD settings +BOOL bASDViaAwayMsg = FALSE; +BOOL bASDViaXtraz = FALSE; +BOOL bASDViaURL = FALSE; +BOOL bASDUnauthorized = FALSE; //work in progress +BOOL bASDViaAuth = FALSE; //work in progress +//other settings +BOOL bTmpContacts = FALSE; +BOOL gbSecureIM = FALSE; +char* TmpGroupName = 0; +BOOL bAddTemp = FALSE; +BOOL bServerAutoChange = TRUE; +WORD wClass; +char szHttpUserAgent[255]; + +extern int bHideXStatusUI; + +PLUGININFOEX pluginInfo = { + sizeof(PLUGININFOEX), + "IcqOscarJ (" ICQ_MODNAME " Mod) Protocol [build #98 (rc 2)]", + PLUGIN_MAKE_VERSION(0,3,8,105), + "Support for ICQ network, enhanced.", + "J.Kucera, Bio, M.berg, R.Hughes, Jon Keating, Faith, S7, BM, sss, chaos.persei, ghazan, baloo, nullbie etc", + "sss123next@list.ru, chaos.persei@gmail.com, sin@miranda-me.org, jokusoftware@miranda-im.org", + "(C) 2000-2007 M. berg, R.Hughes, J.Keating, Bio, J.Kucera, Angeli-Ka, Faith Healer, chaos.persei, Se7ven, BM, sss, [sin], nullbie and others", + "http://dev.mirandaim.ru/sss", + 0, + 0, //doesn't replace anything built-in + { 0xc78614bf, 0x878e, 0x43e4, { 0xa3, 0xf4, 0xa, 0xf9, 0x9a, 0xa5, 0x7a, 0x78 } } +}; + + +struct LIST_INTERFACE listInterface; +SortedList *lstCustomCaps; + + +static char UnicodeAware[32]; + + +static int OnSystemModulesLoaded(WPARAM wParam,LPARAM lParam); +static int OnSystemPreShutdown(WPARAM wParam,LPARAM lParam); +static int icq_PrebuildContactMenu(WPARAM wParam, LPARAM lParam); +static int IconLibIconsChanged(WPARAM wParam, LPARAM lParam); + + +static BOOL bInited = FALSE; + +__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + if (mirandaVersion < PLUGIN_MAKE_VERSION(0, 7, 0, 30)) + { + MessageBox( NULL, "ICQ plugin cannot be loaded. It requires Miranda IM 0.7.0.30 or later.", "ICQ Plugin", + MB_OK|MB_ICONWARNING|MB_SETFOREGROUND|MB_TOPMOST ); + return NULL; + } + else + { + // Are we running under Unicode Windows version ? + gbUnicodeAPI = (GetVersion() & 0x80000000) == 0; + if (gbUnicodeAPI) + { + pluginInfo.flags = 1; + } + MIRANDA_VERSION = mirandaVersion; + bInited = TRUE; + } + + return &pluginInfo; +} + +static const MUUID interfaces[] = {MIID_PROTOCOL, MIID_LAST}; +__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) +{ + return interfaces; +} + + + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + hInst = hinstDLL; + + return TRUE; +} + +static HANDLE ICQCreateServiceFunction(const char* szService, MIRANDASERVICE serviceProc) +{ + char str[MAX_PATH + 32]; + strcpy(str, gpszICQProtoName); + strcat(str, szService); + return CreateServiceFunction(str, serviceProc); +} + +static HANDLE ICQCreateHookableEvent(const char* szEvent) +{ + char str[MAX_PATH + 32]; + strcpy(str, gpszICQProtoName); + strcat(str, szEvent); + return CreateHookableEvent(str); +} + + +static int EnumCustomCapsProc(const char *szSetting,LPARAM lParam) +{ + DBVARIANT dbv; + DBCONTACTGETSETTING dbcgs; + dbcgs.szModule = (char *)lParam; + dbcgs.szSetting = szSetting; + dbcgs.pValue = &dbv; + CallService(MS_DB_CONTACT_GETSETTING, 0, (LPARAM)&dbcgs); + if (dbv.type == DBVT_BLOB) + { + ICQ_CUSTOMCAP icqCustomCap; + icqCustomCap.cbSize = sizeof(icqCustomCap); + strncpy(icqCustomCap.name, szSetting, 64); + memcpy(icqCustomCap.caps, dbv.pbVal, min(0x10, dbv.cpbVal)); + CallProtoService(gpszICQProtoName, PS_ICQ_ADDCAPABILITY, 0, (LPARAM)&icqCustomCap); + } else + if (dbv.type == DBVT_ASCIIZ) + { + ICQ_CUSTOMCAP icqCustomCap; + icqCustomCap.cbSize = sizeof(icqCustomCap); + strncpy(icqCustomCap.name, szSetting, 64); + strncpy(icqCustomCap.caps, dbv.pszVal, 0x10); + CallProtoService(gpszICQProtoName, PS_ICQ_ADDCAPABILITY, 0, (LPARAM)&icqCustomCap); + } + CallService(MS_DB_CONTACT_FREEVARIANT, 0, (LPARAM)&dbv); + return 0; +} + +void RegEventType(int EventType, char* EventDescription) +{ + DBEVENTTYPEDESCR evt; + evt.cbSize=sizeof(evt); + evt.module=gpszICQProtoName; + evt.eventType=EventType; + evt.descr=EventDescription; + CallService(MS_DB_EVENT_REGISTERTYPE, 0, (LPARAM)&evt); +} + +void InitVars() +{ + bSpamPopUp = ICQGetContactSettingByte(NULL,"SpamPopUpEnabled",1); + bUnknownPopUp = ICQGetContactSettingByte(NULL,"UnknownPopUpEnabled",1); + bFoundPopUp = ICQGetContactSettingByte(NULL,"FoundPopUpEnabled",1); + bScanPopUp = ICQGetContactSettingByte(NULL,"ScanPopUpEnabled",1); + bVisPopUp = ICQGetContactSettingByte(NULL,"VisPopUpEnabled",1); + bClientChangePopUp = ICQGetContactSettingByte(NULL,"ClientChangePopup",0); + bPopUpForNotOnList = ICQGetContactSettingByte(NULL,"PopUpForNotOnList",0); + bPopUpsEnabled = ICQGetContactSettingByte(NULL, "PopupsEnabled", 1); + bXstatusIconShow = ICQGetContactSettingByte(NULL, "XStatusIconShow", 1); + bIgnoreCheckPop = ICQGetContactSettingByte(NULL, "IgnoreCheckPop", 1); + bPopSelfRem = ICQGetContactSettingByte(NULL, "PopSelfRem", 1); + bInfoRequestPopUp = ICQGetContactSettingByte(NULL, "InfoRequestPopUp", 0); + bAuthPopUp = ICQGetContactSettingByte(NULL, "AuthPopUp", 0); + bXUpdaterPopUp = ICQGetContactSettingByte(NULL, "XUpdaterPopUp", 0); + bPSD = ICQGetContactSettingByte(NULL, "PSD", 1); + bNoASD = ICQGetContactSettingByte(NULL, "NoASD", 1); + bLogSelfRemoveFile = ICQGetContactSettingByte(NULL, "LogSelfRemoveFile", 0); + bLogIgnoreCheckFile = ICQGetContactSettingByte(NULL, "LogIgnoreCheckFile", 0); + bLogStatusCheckFile = ICQGetContactSettingByte(NULL, "LogStatusCheckFile", 0); + bLogASDFile = ICQGetContactSettingByte(NULL, "LogASDFile", 0); + bLogClientChangeFile = ICQGetContactSettingByte(NULL, "LogClientChangeFile", 0); + bLogAuthFile = ICQGetContactSettingByte(NULL, "LogAuthFile", 0); + bLogInfoRequestFile = ICQGetContactSettingByte(NULL, "LogRequestFile", 0); + bLogSelfRemoveHistory = ICQGetContactSettingByte(NULL, "LogSelfRemoveHistory", 0); + bLogIgnoreCheckHistory = ICQGetContactSettingByte(NULL, "LogIgnoreCheckHistory", 0); + bLogStatusCheckHistory = ICQGetContactSettingByte(NULL, "LogStatusCheckHistory", 0); + bLogASDHistory = ICQGetContactSettingByte(NULL, "LogASDHistory", 0); + bLogClientChangeHistory = ICQGetContactSettingByte(NULL, "LogClientChangeHistory", 0); + bLogAuthHistory = ICQGetContactSettingByte(NULL, "LogAuthHistory", 0); + bLogInfoRequestHistory = ICQGetContactSettingByte(NULL, "LogRequestHistory", 0); + bHcontactHistory = ICQGetContactSettingByte(NULL,"LogToHcontact",0); + bTmpContacts = ICQGetContactSettingByte(NULL, "TempContacts", 0); + TmpGroupName = UniGetContactSettingUtf(NULL,gpszICQProtoName,"TmpContactsGroup", Translate("General")); + bAddTemp = ICQGetContactSettingByte(NULL, "AddTemp", 0); + bNoStatusReply = ICQGetContactSettingByte(NULL,"NoStatusReply", 0); + bServerAutoChange = ICQGetContactSettingByte(NULL,"ServerAutoChange", 1); + bIncognitoGlobal = ICQGetContactSettingByte(NULL, "IncognitoGlobal", 0); + bShowAuth = ICQGetContactSettingByte(NULL, "ShowAuth", 0); + bUinPopup = ICQGetContactSettingByte(NULL, "UinPopup", 0); + bNoPSDForHidden = ICQGetContactSettingByte(NULL, "NoPSDForHidden", 1); + gbASD = ICQGetContactSettingByte(NULL, "ASD", 0); + bASDViaAwayMsg = ICQGetContactSettingByte(NULL, "bASDViaAwayMsg", 0); + bASDViaXtraz = ICQGetContactSettingByte(NULL, "bASDViaXtraz", 0); + bASDViaURL = ICQGetContactSettingByte(NULL, "bASDViaURL", 0); + bASDUnauthorized = ICQGetContactSettingByte(NULL, "bASDUnauthorized", 0); + bASDViaAuth = ICQGetContactSettingByte(NULL, "bASDViaAuth", 0); + strcpy(szHttpUserAgent, ICQGetContactSettingUtf(NULL, "HttpUserAgent", "Mozilla/4.08 [en] (WinNT; U ;Nav)")); +// if(ICQGetContactSettingByte(NULL, "StealthRequest", 0) == 1) +// bStealthRequest = TRUE; +} + + +int __declspec(dllexport) Load(PLUGINLINK *link) +{ + PROTOCOLDESCRIPTOR pd = {0}; + extern void icq_BuildPrivacyMenu(); + + pluginLink = link; + mir_getMMI( &mmi ); + mir_getMD5I( &md5i ); + + ghServerNetlibUser = NULL; + + + + // Are we running under Unicode Windows version ? + gbUnicodeAPI = (GetVersion() & 0x80000000) == 0; + { // Are we running under unicode Miranda core ? + char szVer[MAX_PATH]; + + CallService(MS_SYSTEM_GETVERSIONTEXT, MAX_PATH, (LPARAM)szVer); + _strlwr(szVer); // make sure it is lowercase + gbUnicodeCore = (strstr(szVer, "unicode") != NULL); + + if (strstr(szVer, "alpha") != NULL) + { // Are we running under Alpha Core + MIRANDA_VERSION |= 0x80000000; + } + else if (MIRANDA_VERSION >= 0x00050000 && strstr(szVer, "preview") == NULL) + { // for Final Releases of Miranda 0.5+ clear build number + MIRANDA_VERSION &= 0xFFFFFF00; + } + } + + srand(time(NULL)); + _tzset(); + + // Get module name from DLL file name + { + char* str1; + char str2[MAX_PATH]; + int nProtoNameLen; + + GetModuleFileName(hInst, str2, MAX_PATH); + str1 = strrchr(str2, '\\'); + nProtoNameLen = strlennull(str1); + if (str1 != NULL && (nProtoNameLen > 5)) + { + strncpy(gpszICQProtoName, str1+1, nProtoNameLen-5); + gpszICQProtoName[nProtoNameLen-4] = 0; + } + CharUpper(gpszICQProtoName); + } + + ZeroMemory(gpszPassword, sizeof(gpszPassword)); + + HookEvent(ME_SYSTEM_MODULESLOADED, OnSystemModulesLoaded); + HookEvent(ME_SYSTEM_PRESHUTDOWN, OnSystemPreShutdown); + + InitializeCriticalSection(&connectionHandleMutex); + InitializeCriticalSection(&localSeqMutex); + InitializeCriticalSection(&modeMsgsMutex); + + // Initialize core modules + InitDB(); // DB interface + InitVars(); // global variables + InitCookies(); // cookie utils + InitCache(); // contacts cache + InitReguin(); // reguin module + + DBWriteContactSettingDword(NULL, gpszICQProtoName, "SrvLastUpdate", 0); + DBWriteContactSettingWord(NULL, gpszICQProtoName, "SrvRecordCount", 0); + + InitRates(); // rate management + + // Register the module + pd.cbSize = sizeof(pd); + pd.szName = gpszICQProtoName; + pd.type = PROTOTYPE_PROTOCOL; + CallService(MS_PROTO_REGISTERMODULE, 0, (LPARAM)&pd); + + // Initialize status message struct + ZeroMemory(&modeMsgs, sizeof(icq_mode_messages)); + + // Initialize temporary DB settings + ICQCreateResidentSetting("Status"); // NOTE: XStatus cannot be temporary + ICQCreateResidentSetting("TemporaryVisible"); + ICQCreateResidentSetting("TickTS"); + ICQCreateResidentSetting("IdleTS"); + ICQCreateResidentSetting("LogonTS"); + ICQCreateResidentSetting("CapBuf"); + ICQCreateResidentSetting("DCStatus"); + + // Reset a bunch of session specific settings + ResetSettingsOnLoad(); + + + // Setup services + ICQCreateServiceFunction(PS_GETCAPS, IcqGetCaps); + ICQCreateServiceFunction(PS_GETNAME, IcqGetName); + ICQCreateServiceFunction(PS_LOADICON, IcqLoadIcon); + ICQCreateServiceFunction(PS_SETSTATUS, IcqSetStatus); + ICQCreateServiceFunction(PS_GETSTATUS, IcqGetStatus); + ICQCreateServiceFunction(PS_SETAWAYMSG, IcqSetAwayMsg); + ICQCreateServiceFunction(PS_AUTHALLOW, IcqAuthAllow); + ICQCreateServiceFunction(PS_AUTHDENY, IcqAuthDeny); + ICQCreateServiceFunction(PS_BASICSEARCH, IcqBasicSearch); + ICQCreateServiceFunction(PS_SEARCHBYEMAIL, IcqSearchByEmail); + ICQCreateServiceFunction(MS_ICQ_SEARCHBYDETAILS, IcqSearchByDetails); + ICQCreateServiceFunction(PS_SEARCHBYNAME, IcqSearchByDetails); + ICQCreateServiceFunction(PS_CREATEADVSEARCHUI, IcqCreateAdvSearchUI); + ICQCreateServiceFunction(PS_SEARCHBYADVANCED, IcqSearchByAdvanced); + ICQCreateServiceFunction(MS_ICQ_SENDSMS, IcqSendSms); + ICQCreateServiceFunction(PS_ADDTOLIST, IcqAddToList); + ICQCreateServiceFunction(PS_ADDTOLISTBYEVENT, IcqAddToListByEvent); + ICQCreateServiceFunction(PS_FILERESUME, IcqFileResume); + ICQCreateServiceFunction(PS_SET_NICKNAME, IcqSetNickName); + ICQCreateServiceFunction(PSS_GETINFO, IcqGetInfo); + ICQCreateServiceFunction(PSS_MESSAGE, IcqSendMessage); + ICQCreateServiceFunction(PSS_URL, IcqSendUrl); + ICQCreateServiceFunction(PSS_CONTACTS, IcqSendContacts); + ICQCreateServiceFunction(PSS_SETAPPARENTMODE, IcqSetApparentMode); + ICQCreateServiceFunction(PSS_GETAWAYMSG, IcqGetAwayMsg); + ICQCreateServiceFunction(PSS_FILEALLOW, IcqFileAllow); + ICQCreateServiceFunction(PSS_FILEDENY, IcqFileDeny); + ICQCreateServiceFunction(PSS_FILECANCEL, IcqFileCancel); + ICQCreateServiceFunction(PSS_FILE, IcqSendFile); + ICQCreateServiceFunction(PSR_AWAYMSG, IcqRecvAwayMsg); + ICQCreateServiceFunction(PSR_FILE, IcqRecvFile); + ICQCreateServiceFunction(PSR_MESSAGE, IcqRecvMessage); + ICQCreateServiceFunction(PSR_CONTACTS, IcqRecvContacts); + ICQCreateServiceFunction(PSR_AUTH, IcqRecvAuth); + ICQCreateServiceFunction(PSS_AUTHREQUEST, IcqSendAuthRequest); + ICQCreateServiceFunction(PSS_ADDED, IcqSendYouWereAdded); + ICQCreateServiceFunction(PSS_USERISTYPING, IcqSendUserIsTyping); + // Session password API + ICQCreateServiceFunction(PS_ICQ_SETPASSWORD, IcqSetPassword); + // ChangeInfo API + ICQCreateServiceFunction(PS_CHANGEINFOEX, IcqChangeInfoEx); + // Avatar API + ICQCreateServiceFunction(PS_GETAVATARINFO, IcqGetAvatarInfo); + ICQCreateServiceFunction(PS_GETAVATARCAPS, IcqGetAvatarCaps); + ICQCreateServiceFunction(PS_GETMYAVATAR, IcqGetMyAvatar); + ICQCreateServiceFunction(PS_SETMYAVATAR, IcqSetMyAvatar); + // Custom Status API + ICQCreateServiceFunction(PS_ICQ_SETCUSTOMSTATUS, IcqSetXStatus); // obsolete (remove in next version) + ICQCreateServiceFunction(PS_ICQ_GETCUSTOMSTATUS, IcqGetXStatus); // obsolete + ICQCreateServiceFunction(PS_ICQ_SETCUSTOMSTATUSEX, IcqSetXStatusEx); + ICQCreateServiceFunction(PS_ICQ_GETCUSTOMSTATUSEX, IcqGetXStatusEx); + ICQCreateServiceFunction(PS_ICQ_GETCUSTOMSTATUSICON, IcqGetXStatusIcon); + ICQCreateServiceFunction(PS_ICQ_REQUESTCUSTOMSTATUS, IcqRequestXStatusDetails); + ICQCreateServiceFunction(PS_ICQ_GETADVANCEDSTATUSICON, IcqRequestAdvStatusIconIdx); + // Custom caps + ICQCreateServiceFunction(PS_ICQ_ADDCAPABILITY, IcqAddCapability); + ICQCreateServiceFunction(PS_ICQ_CHECKCAPABILITY, IcqCheckCapability); + + + + hsmsgrequest = ICQCreateHookableEvent(ME_ICQ_STATUSMSGREQ); + hxstatuschanged = ICQCreateHookableEvent(ME_ICQ_CUSTOMSTATUS_CHANGED); + hxstatusiconchanged = ICQCreateHookableEvent(ME_ICQ_CUSTOMSTATUS_EXTRAICON_CHANGED); + + InitDirectConns(); + InitOscarFileTransfer(); + InitServerLists(); + icq_InitInfoUpdate(); + RegEventType(ICQEVENTTYPE_IGNORECHECK_STATUS, "Check ICQ Ignore State"); + RegEventType(ICQEVENTTYPE_CHECK_STATUS, "Check ICQ Status"); + RegEventType(ICQEVENTTYPE_CLIENT_CHANGE, "Chenge ICQ Client"); + RegEventType(ICQEVENTTYPE_SELF_REMOVE, "ICQ Contact SelfRemove"); + RegEventType(ICQEVENTTYPE_AUTH_DENIED, "ICQ Auth Denied"); + RegEventType(ICQEVENTTYPE_AUTH_GRANTED, "ICQ Auth Granted"); + RegEventType(ICQEVENTTYPE_AUTH_REQUESTED, "ICQ Auth Requested"); + RegEventType(ICQEVENTTYPE_YOU_ADDED, "ICQ You Added"); + RegEventType(ICQEVENTTYPE_WAS_FOUND, "Detected via ASD\\PSD"); + + + icq_InitISee(); + + // Initialize charset conversion routines + InitI18N(); + + UpdateGlobalSettings(); + + gnCurrentStatus = ID_STATUS_OFFLINE; + + ICQCreateServiceFunction(MS_ICQ_ADDSERVCONTACT, IcqAddServerContact); + + ICQCreateServiceFunction(MS_REQ_AUTH, icq_RequestAuthorization); + ICQCreateServiceFunction(MS_GRANT_AUTH, IcqGrantAuthorization); + ICQCreateServiceFunction(MS_REVOKE_AUTH, IcqRevokeAuthorization); + ICQCreateServiceFunction(MS_SETINVIS, IcqSetInvis); + ICQCreateServiceFunction(MS_SETVIS, IcqSetVis); + ICQCreateServiceFunction(MS_INCOGNITO_REQUEST, IncognitoAwayRequest); + ICQCreateServiceFunction(MS_SEND_TZER, IcqSendtZer); + + ICQCreateServiceFunction(MS_XSTATUS_SHOWDETAILS, IcqShowXStatusDetails); + + hHookIconsChanged = IconLibHookIconsChanged(IconLibIconsChanged); + + InitXStatusIcons(); + + // This must be here - the events are called too early, WTF? + InitXStatusEvents(); + + if (DBGetContactSettingByte(NULL, gpszICQProtoName, "PrivacyMenu", DEFAULT_PRIVACY_ENABLED)) + icq_BuildPrivacyMenu(); + + + + //Custom caps + mir_getLI(&listInterface); + lstCustomCaps = listInterface.List_Create(0,1); + lstCustomCaps->sortFunc = NULL; + + { + char tmp[MAXMODULELABELLENGTH]; + DBCONTACTENUMSETTINGS dbces; + mir_snprintf(tmp, MAXMODULELABELLENGTH, "%sCaps", gpszICQProtoName); + dbces.pfnEnumProc = EnumCustomCapsProc; + dbces.lParam = (LPARAM)tmp; + dbces.szModule = tmp; + CallService(MS_DB_CONTACT_ENUMSETTINGS, 0, (LPARAM)&dbces); + } + + + + ICQCreateThread(icq_XStatusUpdaterThread, NULL); + +/* + { + ICQ_CUSTOMCAP icqCustomCap; + IcqBuildMirandaCap(&icqCustomCap, "Miranda ICQ Capability Test", NULL, "TestTest"); + CallProtoService(gpszICQProtoName, PS_ICQ_ADDCAPABILITY, 0, (LPARAM)&icqCustomCap); + } +*/ + return 0; + +} + + + +int __declspec(dllexport) Unload(void) +{ + extern void icq_DestroyPrivacyMenu(); + if (gbXStatusEnabled) gbXStatusEnabled = 10; // block clist changing + + UninitXStatusEvents(); + + if (hServerConn) + { + icq_sendCloseConnection(); + + icq_serverDisconnect(TRUE); + } + + UninitServerLists(); + UninitOscarFileTransfer(); + UninitDirectConns(); + icq_InfoUpdateCleanup(); + icq_ISeeCleanup(); + icq_DestroyPrivacyMenu(); + + NetLib_SafeCloseHandle(&ghDirectNetlibUser); + NetLib_SafeCloseHandle(&ghServerNetlibUser); + UninitRates(); + UninitCookies(); + UninitCache(); + DeleteCriticalSection(&modeMsgsMutex); + DeleteCriticalSection(&localSeqMutex); + DeleteCriticalSection(&connectionHandleMutex); + SAFE_FREE(&modeMsgs.szOnline); + SAFE_FREE(&modeMsgs.szAway); + SAFE_FREE(&modeMsgs.szNa); + SAFE_FREE(&modeMsgs.szOccupied); + SAFE_FREE(&modeMsgs.szDnd); + SAFE_FREE(&modeMsgs.szFfc); + + if (hHookIconsChanged) + UnhookEvent(hHookIconsChanged); + + if (hHookUserInfoInit) + UnhookEvent(hHookUserInfoInit); + + if (hHookOptionInit) + UnhookEvent(hHookOptionInit); + + if (hsmsgrequest) + DestroyHookableEvent(hsmsgrequest); + + if (hxstatuschanged) + DestroyHookableEvent(hxstatuschanged); + + if (hxstatusiconchanged) + DestroyHookableEvent(hxstatusiconchanged); + + if (hHookUserMenu) + UnhookEvent(hHookUserMenu); + + if (hHookIdleEvent) + UnhookEvent(hHookIdleEvent); + + bVisibility = ICQGetContactSettingByte(NULL, "SrvVisibility", 0); + + return 0; +} + + + + + + +static int OnSystemModulesLoaded(WPARAM wParam,LPARAM lParam) +{ + NETLIBUSER nlu = {0}; + char pszP2PName[MAX_PATH+3]; + char pszGroupsName[MAX_PATH+10]; + char pszSrvGroupsName[MAX_PATH+10]; + char pszCapsName[MAX_PATH+10]; + char szBuffer[MAX_PATH+64]; + char* modules[6] = {0,0,0,0,0,0}; + + if (ServiceExists(MS_POPUP_ADDPOPUPEX)) + bPopUpService = TRUE; + if (ServiceExists("SecureIM/IsContactSecured")) + gbSecureIM = TRUE; + + + /* if(ServiceExists(MS_ASSOCMGR_ADDNEWFILETYPE)) //need to be finishaed + { + { + FILETYPEDESC ftd; + ftd.cbSize=sizeof(ftd); + ftd.pwszDescription=TranslateW("ICQ link file"); + ftd.pszDescription=Translate("ICQ link file"); + ftd.ptszDescription=TranslateT("ICQ link file"); + ftd.pszFileExt=".icq"; + ftd.pszMimeType="application/x-icq"; + ftd.pszService=0; + ftd.flags=FTDF_DEFAULTDISABLED; + CallService(MS_ASSOCMGR_ADDNEWFILETYPE,0,(LPARAM)&ftd); + } + { + URLTYPEDESC utd; + utd.cbSize=sizeof(utd); + utd.pszDescription=Translate("ICQ Link"); + utd.ptszDescription=TranslateT("ICQ Link"); + utd.pwszDescription=TranslateW("ICQ Link"); + utd.flags=UTDF_DEFAULTDISABLED; + utd.pszService=0; + utd.pszProtoPrefix="http:"; + CallService(MS_ASSOCMGR_ADDNEWURLTYPE,0,(LPARAM)&utd); + } + }*/ + +/* if(ServiceExists(MS_UPDATE_REGISTER)) + { + Update upd = {0}; + char szCurrentVersion[30]; + char pszBuild[10]; + int i=0; + BOOL testing = DBGetContactSettingByte(NULL, "Updater", "UseBetaIcqOscarJ (" ICQ_MODNAME " Mod) Protocol", 0); + + // get build number + char *p=strstr(pluginInfo.shortName, "#"); + if(p) p++; + while (p && (*p>='0')&&(*p<='9')) + { + pszBuild[i++]=*p; + p++; + } + pszBuild[i]=0; + + upd.cbSize = sizeof(upd); + upd.szComponentName = "IcqOscarJ (" ICQ_MODNAME " Mod) Protocol"; + upd.pbVersion = testing?(BYTE*)pszBuild:(BYTE*)CreateVersionString(pluginInfo.version, szCurrentVersion); + upd.cpbVersion = strlen(( char *)upd.pbVersion); + + upd.szBetaUpdateURL = "http://dev.mirandaim.ru/~sss/get.php?file=icq_test.zip"; + upd.szBetaVersionURL = "http://dev.mirandaim.ru/~sss/get.php?file=icq_test.txt"; + upd.pbBetaVersionPrefix = (BYTE *)"icq test build "; + upd.cpbBetaVersionPrefix = strlen(( char *)upd.pbBetaVersionPrefix); + + upd.szUpdateURL = testing?upd.szBetaUpdateURL:"http://dev.mirandaim.ru/~sss/get.php?file=icq.zip"; + upd.szVersionURL = testing?upd.szBetaVersionURL:"http://dev.mirandaim.ru/~sss/get.php?file=icq.txt"; + upd.pbVersionPrefix = testing?upd.pbBetaVersionPrefix:(BYTE *)"icq "; + upd.cpbVersionPrefix = strlen(( char *)upd.pbVersionPrefix); + + upd.szBetaChangelogURL = "http://dev.mirandaim.ru/~sss/get.php?file=icq_test.txt"; + + CallService(MS_UPDATE_REGISTER, 0, (LPARAM)&upd); + } //thx sje */ + + + strcpy(pszP2PName, gpszICQProtoName); + strcat(pszP2PName, "P2P"); + + strcpy(pszGroupsName, gpszICQProtoName); + strcat(pszGroupsName, "Groups"); + strcpy(pszSrvGroupsName, gpszICQProtoName); + strcat(pszSrvGroupsName, "SrvGroups"); + strcpy(pszCapsName, gpszICQProtoName); + strcat(pszCapsName, "Caps"); + modules[0] = gpszICQProtoName; + modules[1] = pszP2PName; + modules[2] = pszGroupsName; + modules[3] = pszSrvGroupsName; + modules[4] = pszCapsName; + CallService("DBEditorpp/RegisterModule",(WPARAM)modules,(LPARAM)5); + + + null_snprintf(szBuffer, sizeof szBuffer, ICQTranslate("%s server connection"), gpszICQProtoName); + nlu.cbSize = sizeof(nlu); + nlu.flags = NUF_OUTGOING | NUF_HTTPGATEWAY; + nlu.szDescriptiveName = szBuffer; + nlu.szSettingsModule = gpszICQProtoName; + nlu.szHttpGatewayHello = "http://http.proxy.icq.com/hello"; + nlu.szHttpGatewayUserAgent = szHttpUserAgent; + nlu.pfnHttpGatewayInit = icq_httpGatewayInit; + nlu.pfnHttpGatewayBegin = icq_httpGatewayBegin; + nlu.pfnHttpGatewayWrapSend = icq_httpGatewayWrapSend; + nlu.pfnHttpGatewayUnwrapRecv = icq_httpGatewayUnwrapRecv; + + ghServerNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu); + + null_snprintf(szBuffer, sizeof szBuffer, ICQTranslate("%s client-to-client connections"), gpszICQProtoName); + nlu.flags = NUF_OUTGOING | NUF_INCOMING; + nlu.szDescriptiveName = szBuffer; + nlu.szSettingsModule = pszP2PName; + nlu.minIncomingPorts = 1; + ghDirectNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu); + + hHookOptionInit = HookEvent(ME_OPT_INITIALISE, IcqOptInit); + hHookUserInfoInit = HookEvent(ME_USERINFO_INITIALISE, OnDetailsInit); + hHookUserMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, icq_PrebuildContactMenu); + hHookIdleEvent = HookEvent(ME_IDLE_CHANGED, IcqIdleChanged); + + hPopUpsList = (HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST,0,0); + + icq_FirstRunCheck(); + + InitAvatars(); + + // Init extra optional modules + //InitPopUps(); + InitIconLib(); + + hHookIconsChanged = IconLibHookIconsChanged(IconLibIconsChanged); + // Initialize IconLib icons + InitXStatusIcons(); + InitXStatusEvents(); + InitXStatusItems(FALSE); + + InitDCEvents(); + + { + // userinfo + ICQWriteContactSettingUtf(NULL, "MirVer", Translate("you need to be connected...")); + DBWriteContactSettingDword(NULL, gpszICQProtoName, "IP", 0); + if(!DBGetContactSettingByte(NULL, gpszICQProtoName, "ConstRealIP", 0)) + DBWriteContactSettingDword(NULL, gpszICQProtoName, "RealIP", 0); + DBWriteContactSettingWord(NULL, gpszICQProtoName, "UserPort", 0); + DBWriteContactSettingDword(NULL, gpszICQProtoName, "LogonTS", 0); + DBWriteContactSettingDword(NULL, gpszICQProtoName, "IdleTS", 0); + DBWriteContactSettingDword(NULL, gpszICQProtoName, "Status", ID_STATUS_OFFLINE); + } + { + CLISTMENUITEM mi; + char pszServiceName[MAX_PATH+30]; + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_REQ_AUTH); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 1000030000; + mi.hIcon = IconLibGetIcon("req_auth"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Request authorization"); + mi.pszService = pszServiceName; + hUserMenuAuth = (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); + IconLibReleaseIcon("req_auth"); + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_GRANT_AUTH); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 1000029999; + mi.hIcon = IconLibGetIcon("grant_auth"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Grant authorization"); + mi.pszService = pszServiceName; + hUserMenuGrant = (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); + IconLibReleaseIcon("grant_auth"); + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_REVOKE_AUTH); + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 1000029998; + mi.hIcon = IconLibGetIcon("revoke_auth"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Revoke authorization"); + mi.pszService = pszServiceName; + hUserMenuRevoke = (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); + IconLibReleaseIcon("revoke_auth"); + + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_ICQ_ADDSERVCONTACT); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = -2049999999; + mi.hIcon = IconLibGetIcon("add_to_server"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Add to server list"); + mi.pszService = pszServiceName; + hUserMenuAddServ = (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); + IconLibReleaseIcon("add_to_server"); + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_XSTATUS_SHOWDETAILS); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = -2000004999; + mi.hIcon = NULL; // dynamically updated + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Show custom status details"); + mi.pszService = pszServiceName; + mi.flags=CMIF_NOTOFFLINE; + hUserMenuXStatus = (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); + + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_SETVIS); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 2106000000; + mi.flags = 0; + mi.hIcon = IconLibGetIcon("set_vis"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Always visible"); + mi.pszService = pszServiceName; + hUserMenuSetVis=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); + IconLibReleaseIcon("set_vis"); + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_SETINVIS); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 2107000000; + mi.flags = 0; + mi.hIcon = IconLibGetIcon("set_invis"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Always invisible"); + mi.pszService = pszServiceName; + hUserMenuSetInvis=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); + IconLibReleaseIcon("set_invis"); + + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_INCOGNITO_REQUEST); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = -2000005000; + mi.flags = 0; + mi.hIcon = IconLibGetIcon("incognito"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Incognito Away-Request"); + mi.pszService = pszServiceName; + hUserMenuIncognito=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); + IconLibReleaseIcon("incognito"); + + + strcpy(pszServiceName, gpszICQProtoName); + strcat(pszServiceName, MS_SEND_TZER); + + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 2108000000; + mi.flags = 0; + mi.hIcon = IconLibGetIcon("send_tzer"); + mi.pszContactOwner = gpszICQProtoName; + mi.pszName = LPGEN("Send tZer"); + mi.pszService = pszServiceName; + hUserMenuSendtZer=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); + IconLibReleaseIcon("send_tzer"); + + + } + + return 0; +} + + + +static int OnSystemPreShutdown(WPARAM wParam,LPARAM lParam) +{ // all threads should be terminated here + if (hServerConn) + { + icq_sendCloseConnection(); + + icq_serverDisconnect(TRUE); + } + CheckSelfRemoveShutdown(); + + return 0; +} + + + +void CListShowMenuItem(HANDLE hMenuItem, BYTE bShow) +{ + CLISTMENUITEM mi = {0}; + + mi.cbSize = sizeof(mi); + if (bShow) + mi.flags = CMIM_FLAGS; + else + mi.flags = CMIM_FLAGS | CMIF_HIDDEN; + + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItem, (LPARAM)&mi); +} + + + +void CListSetMenuItemIcon(HANDLE hMenuItem, HICON hIcon) +{ + CLISTMENUITEM mi = {0}; + + mi.cbSize = sizeof(mi); + mi.flags = CMIM_FLAGS | CMIM_ICON; + + mi.hIcon = hIcon; + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItem, (LPARAM)&mi); +} + + + +static int icq_PrebuildContactMenu(WPARAM wParam, LPARAM lParam) +{ + BYTE bXStatus; + CLISTMENUITEM cli={0}; + extern HANDLE hStatusMenu; + + CListShowMenuItem(hUserMenuAuth, bShowAuth?1:ICQGetContactSettingByte((HANDLE)wParam, "Auth", 0) && icqOnline); + CListShowMenuItem(hUserMenuGrant, bShowAuth?1:ICQGetContactSettingByte((HANDLE)wParam, "Grant", 0) && icqOnline); + CListShowMenuItem(hUserMenuRevoke, icqOnline); + CListShowMenuItem(hUserMenuSetVis, icqOnline); + CListShowMenuItem(hUserMenuSetInvis, icqOnline); + CListShowMenuItem(hUserMenuStatus, icqOnline && gbASD); +// CListShowMenuItem(hStatusMenu, icqOnline && gbASD); //not woking ? %), looks like we need other method + CListShowMenuItem(hUserMenuIncognito, (/*bStealthRequest && */!bIncognitoGlobal && + (ICQGetContactSettingWord((HANDLE)wParam, "Status", 0)!= ID_STATUS_OFFLINE) && + (ICQGetContactSettingWord((HANDLE)wParam, "Status", 0)!= ID_STATUS_INVISIBLE) && icqOnline)); //now away messages for online supported + CListShowMenuItem(hUserMenuSendtZer, icqOnline && gbTzerEnabled); + + cli.cbSize=sizeof(CLISTMENUITEM); + cli.flags=CMIM_FLAGS; + cli.hIcon=NULL; + cli.pszContactOwner=NULL; + + switch(ICQGetContactSettingWord((HANDLE)wParam, "ApparentMode",0)) + { + case ID_STATUS_ONLINE: + cli.flags|=CMIF_CHECKED; + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hUserMenuSetVis,(LPARAM)&cli); + break; + + case ID_STATUS_OFFLINE: + cli.flags|=CMIF_CHECKED; + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hUserMenuSetInvis,(LPARAM)&cli); + break; + + default: + break; + } + + + if (gbSsiEnabled && !ICQGetContactSettingWord((HANDLE)wParam, "ServerId", 0) && !ICQGetContactSettingWord((HANDLE)wParam, "SrvIgnoreId", 0)) + CListShowMenuItem(hUserMenuAddServ, 1); + else + CListShowMenuItem(hUserMenuAddServ, 0); + + bXStatus = ICQGetContactXStatus((HANDLE)wParam); + CListShowMenuItem(hUserMenuXStatus, (BYTE)(bHideXStatusUI ? 0 : bXStatus)); + if (bXStatus && !bHideXStatusUI) + { + CListSetMenuItemIcon(hUserMenuXStatus, GetXStatusIcon(bXStatus, LR_SHARED)); + } + + return 0; +} + + + +static int IconLibIconsChanged(WPARAM wParam, LPARAM lParam) +{ + CListSetMenuItemIcon(hUserMenuAuth, IconLibGetIcon("req_auth")); + IconLibReleaseIcon("req_auth"); + CListSetMenuItemIcon(hUserMenuGrant, IconLibGetIcon("grant_auth")); + IconLibReleaseIcon("grant_auth"); + CListSetMenuItemIcon(hUserMenuRevoke, IconLibGetIcon("revoke_auth")); + IconLibReleaseIcon("revoke_auth"); + CListSetMenuItemIcon(hUserMenuAddServ, IconLibGetIcon("add_to_server")); + IconLibReleaseIcon("add_to_server"); + CListSetMenuItemIcon(hUserMenuIncognito, IconLibGetIcon("incognito_request")); + IconLibReleaseIcon("incognito_request"); + CListSetMenuItemIcon(hUserMenuSendtZer, IconLibGetIcon("send_tzer")); + IconLibReleaseIcon("send_tzer"); + + ChangedIconsXStatus(); + + return 0; +} + + + +void UpdateGlobalSettings() +{ + if (ghServerNetlibUser) + { + NETLIBUSERSETTINGS nlus = {0}; + + nlus.cbSize = sizeof(NETLIBUSERSETTINGS); + if (CallService(MS_NETLIB_GETUSERSETTINGS, (WPARAM)ghServerNetlibUser, (LPARAM)&nlus)) + { + if (nlus.useProxy && nlus.proxyType == PROXYTYPE_HTTP) + gbGatewayMode = 1; + else + gbGatewayMode = 0; + } + else + gbGatewayMode = 0; + } + + gbSecureLogin = ICQGetContactSettingByte(NULL, "SecureLogin", DEFAULT_SECURE_LOGIN); + gbAimEnabled = ICQGetContactSettingByte(NULL, "AimEnabled", DEFAULT_AIM_ENABLED); + gbUtfEnabled = ICQGetContactSettingByte(NULL, "UtfEnabled", DEFAULT_UTF_ENABLED); + gwAnsiCodepage = ICQGetContactSettingWord(NULL, "AnsiCodePage", DEFAULT_ANSI_CODEPAGE); + gbDCMsgEnabled = ICQGetContactSettingByte(NULL, "DirectMessaging", DEFAULT_DCMSG_ENABLED); + gbTempVisListEnabled = ICQGetContactSettingByte(NULL, "TempVisListEnabled", DEFAULT_TEMPVIS_ENABLED); + gbSsiEnabled = ICQGetContactSettingByte(NULL, "UseServerCList", DEFAULT_SS_ENABLED); + gbAvatarsEnabled = ICQGetContactSettingByte(NULL, "AvatarsEnabled", DEFAULT_AVATARS_ENABLED); + gbXStatusEnabled = ICQGetContactSettingByte(NULL, "XStatusEnabled", DEFAULT_XSTATUS_ENABLED); + gbCustomCapEnabled = ICQGetContactSettingByte(NULL, "customcap", 1); + gbHideIdEnabled = ICQGetContactSettingByte(NULL, "Hide ID", 1); + gbRTFEnabled = ICQGetContactSettingByte(NULL, "RTF", 0); + gbVerEnabled = ICQGetContactSettingByte(NULL, "CurrentVer", 0); + gbTzerEnabled = ICQGetContactSettingByte(NULL, "tZer", 0); +} -- cgit v1.2.3