diff options
author | watcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb> | 2011-04-21 14:14:52 +0000 |
---|---|---|
committer | watcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb> | 2011-04-21 14:14:52 +0000 |
commit | cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c (patch) | |
tree | 30df260fdc5a1b5a7049c2f8cac8b7ef17513d6d /icqj_s7_sss_mod/init.c | |
parent | 19b6f534d2e784a1e120bf52c4aa07004798f473 (diff) |
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
Diffstat (limited to 'icqj_s7_sss_mod/init.c')
-rw-r--r-- | icqj_s7_sss_mod/init.c | 1069 |
1 files changed, 1069 insertions, 0 deletions
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);
+}
|