From f25d585f07dafbcfa99e0c33dc9bbe0d72230074 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 7 Apr 2015 14:22:35 +0000 Subject: - MRA clients detection for ICQ; - code cleaning git-svn-id: http://svn.miranda-ng.org/main/trunk@12656 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/IcqOscarJ/src/fam_01service.cpp | 4 +- protocols/IcqOscarJ/src/fam_04message.cpp | 1 - protocols/IcqOscarJ/src/icq_clients.cpp | 119 ++++++++++++------------- protocols/IcqOscarJ/src/icq_proto.cpp | 30 +++---- protocols/IcqOscarJ/src/icq_servlist.cpp | 32 +++---- protocols/IcqOscarJ/src/icq_uploadui.cpp | 12 +-- protocols/IcqOscarJ/src/icqosc_svcs.cpp | 13 +-- protocols/IcqOscarJ/src/oscar_filetransfer.cpp | 6 +- protocols/IcqOscarJ/src/utilities.cpp | 1 - 9 files changed, 94 insertions(+), 124 deletions(-) (limited to 'protocols/IcqOscarJ') diff --git a/protocols/IcqOscarJ/src/fam_01service.cpp b/protocols/IcqOscarJ/src/fam_01service.cpp index 3042967e53..6363ab8d4f 100644 --- a/protocols/IcqOscarJ/src/fam_01service.cpp +++ b/protocols/IcqOscarJ/src/fam_01service.cpp @@ -468,8 +468,6 @@ char* CIcqProto::buildUinList(int subtype, size_t wMaxLen, MCONTACT *hContactRes { MCONTACT hContact; WORD wCurrentLen = 0; - DWORD dwUIN; - uid_str szUID; int add; char *szList = (char*)SAFE_MALLOC(CallService(MS_DB_CONTACT_GETCOUNT, 0, 0) * UINMAXLEN); @@ -483,6 +481,8 @@ char* CIcqProto::buildUinList(int subtype, size_t wMaxLen, MCONTACT *hContactRes hContact = db_find_first(m_szModuleName); while (hContact != NULL) { + DWORD dwUIN; + uid_str szUID; if (!getContactUid(hContact, &dwUIN, &szUID)) { szLen[0] = (char)mir_strlen(strUID(dwUIN, szUID)); diff --git a/protocols/IcqOscarJ/src/fam_04message.cpp b/protocols/IcqOscarJ/src/fam_04message.cpp index afaa6e59bb..288d129b6e 100644 --- a/protocols/IcqOscarJ/src/fam_04message.cpp +++ b/protocols/IcqOscarJ/src/fam_04message.cpp @@ -2250,7 +2250,6 @@ void CIcqProto::handleRecvServMsgError(BYTE *buf, size_t wLen, DWORD dwSequence) // all packet cookies from msg family has command 0 in the queue DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) { // Invalid contact FreeCookie((WORD)dwSequence); diff --git a/protocols/IcqOscarJ/src/icq_clients.cpp b/protocols/IcqOscarJ/src/icq_clients.cpp index 51d3385d84..2fd5be96a9 100644 --- a/protocols/IcqOscarJ/src/icq_clients.cpp +++ b/protocols/IcqOscarJ/src/icq_clients.cpp @@ -46,10 +46,10 @@ static const char* makeClientVersion(char *szBuf, const char *szClient, unsigned static void verToStr(char *szStr, int v) { char szVer[64]; - - makeClientVersion(szVer, "", (v>>24)&0x7F, (v>>16)&0xFF, (v>>8)&0xFF, v&0xFF); + makeClientVersion(szVer, "", (v >> 24) & 0x7F, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF); strcat(szStr, szVer); - if (v&0x80000000) strcat(szStr, " alpha"); + if (v & 0x80000000) + strcat(szStr, " alpha"); } static char* MirandaVersionToStringEx(char* szStr, int bUnicode, const char* szPlug, int v, int m) @@ -61,7 +61,7 @@ static char* MirandaVersionToStringEx(char* szStr, int bUnicode, const char* szP if (!m && v == 1) verToStr(szStr, 0x80010200); - else if (!m && (v&0x7FFFFFFF) <= 0x030301) + else if (!m && (v & 0x7FFFFFFF) <= 0x030301) verToStr(szStr, v); else { if (m) { @@ -82,17 +82,16 @@ static char* MirandaVersionToStringEx(char* szStr, int bUnicode, const char* szP } char* MirandaModToString(char* szStr, capstr* capId, int bUnicode, const char* szModName) -{ // decode icqj mod version - char* szClient; +{ + // decode icqj mod version DWORD mver = (*capId)[0x4] << 0x18 | (*capId)[0x5] << 0x10 | (*capId)[0x6] << 8 | (*capId)[0x7]; DWORD iver = (*capId)[0x8] << 0x18 | (*capId)[0x9] << 0x10 | (*capId)[0xA] << 8 | (*capId)[0xB]; DWORD scode = (*capId)[0xC] << 0x18 | (*capId)[0xD] << 0x10 | (*capId)[0xE] << 8 | (*capId)[0xF]; - szClient = MirandaVersionToStringEx(szStr, bUnicode, szModName, iver, mver); + char *szClient = MirandaVersionToStringEx(szStr, bUnicode, szModName, iver, mver); if (scode == 0x5AFEC0DE) - { strcat(szClient, " + SecureIM"); - } + return szClient; } @@ -199,20 +198,13 @@ const char* CIcqProto::detectUserClient( *bClientId = CLID_ALTERNATIVE; // Most clients does not tick as MsgIDs // Is this a Miranda IM client? - if (dwFT1 == 0xffffffff) - { - if (dwFT2 == 0xffffffff) - { // This is Gaim not Miranda + if (dwFT1 == 0xffffffff) { + if (dwFT2 == 0xffffffff) // This is Gaim not Miranda szClient = "Gaim"; - } - else if (!dwFT2 && wVersion == 7) - { // This is WebICQ not Miranda + else if (!dwFT2 && wVersion == 7) // This is WebICQ not Miranda szClient = "WebICQ"; - } - else if (!dwFT2 && dwFT3 == 0x3B7248ED) - { // And this is most probably Spam Bot + else if (!dwFT2 && dwFT3 == 0x3B7248ED) // And this is most probably Spam Bot szClient = cliSpamBot; - } else { // Yes this is most probably Miranda, get the version info szClient = MirandaVersionToStringEx(szClientBuf, 0, "ICQ", dwFT2, 0); @@ -239,10 +231,9 @@ const char* CIcqProto::detectUserClient( else if (dwFT1 == 0xffffff42) szClient = "mICQ"; else if (dwFT1 == 0xffffffbe) { - unsigned ver1 = (dwFT2>>24)&0xFF; - unsigned ver2 = (dwFT2>>16)&0xFF; - unsigned ver3 = (dwFT2>>8)&0xFF; - + unsigned ver1 = (dwFT2 >> 24) & 0xFF; + unsigned ver2 = (dwFT2 >> 16) & 0xFF; + unsigned ver3 = (dwFT2 >> 8) & 0xFF; szClient = makeClientVersion(szClientBuf, "Alicq ", ver1, ver2, ver3, 0); } else if (dwFT1 == 0xFFFFFF7F) @@ -293,7 +284,7 @@ const char* CIcqProto::detectUserClient( szClient = szClientBuf; } else if (dwFT1 == dwFT2 && dwFT2 == dwFT3 && wVersion == 8) { - if ((dwFT1 < dwOnlineSince + 3600) && (dwFT1 > (dwOnlineSince - 3600))) + if ((dwFT1 < dwOnlineSince + 3600) && (dwFT1 >(dwOnlineSince - 3600))) szClient = cliSpamBot; } else if (!dwFT1 && !dwFT2 && !dwFT3 && !wVersion && !wLen && dwWebPort == 0x75BB) @@ -401,9 +392,9 @@ const char* CIcqProto::detectUserClient( szClient = makeClientVersion(szClientBuf, "SIM ", ver1, ver2, ver3, ver4 & 0x0F); if (ver4 & 0x80) - strcat(szClientBuf,"/Win32"); + strcat(szClientBuf, "/Win32"); else if (ver4 & 0x40) - strcat(szClientBuf,"/MacOS X"); + strcat(szClientBuf, "/MacOS X"); } else if (capId = MatchCapability(caps, wLen, &capLicq, 0xC)) { unsigned ver1 = (*capId)[0xC]; @@ -412,7 +403,7 @@ const char* CIcqProto::detectUserClient( szClient = makeClientVersion(szClientBuf, cliLicqVer, ver1, ver2, ver3, 0); if ((*capId)[0xF]) - strcat(szClientBuf,"/SSL"); + strcat(szClientBuf, "/SSL"); } else if (capId = MatchCapability(caps, wLen, &capKopete, 0xC)) { unsigned ver1 = (*capId)[0xC]; @@ -477,7 +468,6 @@ const char* CIcqProto::detectUserClient( else if (MatchCapability(caps, wLen, &capQipMobile)) szClient = "QIP Mobile (Java)"; else if (MatchCapability(caps, wLen, &capQipInfium)) { - strcpy(szClientBuf, "QIP Infium"); if (dwFT1) { mir_snprintf(ver, SIZEOF(ver), " (%d)", dwFT1); @@ -561,19 +551,17 @@ const char* CIcqProto::detectUserClient( unsigned ver2 = (*capId)[0xD]; unsigned ver3 = (*capId)[0xE]; unsigned ver4 = (*capId)[0xF]; - szClient = makeClientVersion(szClientBuf, "JICQ ", ver1, ver2, ver3, ver4); } // http://www.inlusoft.com else if (MatchCapability(caps, wLen, &capInluxMsgr)) szClient = "Inlux Messenger"; // http://mip.rufon.net - else if (capId = MatchCapability(caps, wLen, &capMipClient, 0xC)) { + else if (capId = MatchCapability(caps, wLen, &capMipClient, 0xC)) { unsigned ver1 = (*capId)[0xC]; unsigned ver2 = (*capId)[0xD]; unsigned ver3 = (*capId)[0xE]; unsigned ver4 = (*capId)[0xF]; - if (ver1 < 30) makeClientVersion(szClientBuf, "MIP ", ver1, ver2, ver3, ver4); else { @@ -600,7 +588,7 @@ const char* CIcqProto::detectUserClient( szClient = szClientBuf; } // http://yapp.ru - else if (capId = MatchCapability(caps, wLen, &capYapp, 0x04)) { + else if (capId = MatchCapability(caps, wLen, &capYapp, 0x04)) { strcpy(szClientBuf, "Yapp! v"); strncat(szClientBuf, (char*)(*capId) + 8, 5); szClient = szClientBuf; @@ -618,11 +606,10 @@ const char* CIcqProto::detectUserClient( else if (MatchCapability(caps, wLen, &capPigeon, 0x07)) szClient = "PIGEON!"; // http://www.qutim.org - else if (capId = MatchCapability(caps, wLen, &capQutIm, 0x05)) { + else if (capId = MatchCapability(caps, wLen, &capQutIm, 0x05)) { if ((*capId)[0x6] == 0x2E) { // old qutim id unsigned ver1 = (*capId)[0x5] - 0x30; unsigned ver2 = (*capId)[0x7] - 0x30; - makeClientVersion(szClientBuf, "qutIM ", ver1, ver2, 0, 0); } else { // new qutim id @@ -661,7 +648,6 @@ const char* CIcqProto::detectUserClient( unsigned ver2 = (*capId)[0x8]; unsigned ver3 = (*capId)[0x9]; unsigned ver4 = (*capId)[0xA]; - szClient = makeClientVersion(szClientBuf, "IcqKid2 v", ver1, ver2, ver3, ver4); } // http://intrigue.ru/workshop/webicqpro/webicqpro.html @@ -671,7 +657,7 @@ const char* CIcqProto::detectUserClient( else if (capId = MatchCapability(caps, wLen, &capCitron)) szClient = "Citron IM"; // try to determine which client is behind libicq2000 - else if (szClient == cliLibicq2k) { + else if (szClient == cliLibicq2k) { if (CheckContactCapabilities(hContact, CAPF_RTF)) szClient = cliCentericq; // centericq added rtf capability to libicq2000 else if (CheckContactCapabilities(hContact, CAPF_UTF)) @@ -715,10 +701,9 @@ const char* CIcqProto::detectUserClient( } } // libpurple (e.g. Pidgin 2.7.x) - else if (CheckContactCapabilities(hContact, CAPF_SRV_RELAY | CAPF_UTF | CAPF_TYPING | CAPF_XTRAZ) && + else if (CheckContactCapabilities(hContact, CAPF_SRV_RELAY | CAPF_UTF | CAPF_TYPING | CAPF_XTRAZ) && MatchCapability(caps, wLen, &capOscarChat) && MatchShortCapability(caps, wLen, &capAimIcon) && - MatchCapability(caps, wLen, &capFakeHtml)) - { + MatchCapability(caps, wLen, &capFakeHtml)) { if (MatchShortCapability(caps, wLen, &capAimDirect)) szClient = "libpurple"; else @@ -740,9 +725,8 @@ const char* CIcqProto::detectUserClient( if (CheckContactCapabilities(hContact, CAPF_OSCAR_FILE)) { if (MatchCapability(caps, wLen, &captZers)) { // capable of tZers ? - if ( MatchCapability(caps, wLen, &capIcqLiteNew) && MatchShortCapability(caps, wLen, &capStatusTextAware) && - MatchShortCapability(caps, wLen, &capAimLiveVideo) && MatchShortCapability(caps, wLen, &capAimLiveAudio)) - { + if (MatchCapability(caps, wLen, &capIcqLiteNew) && MatchShortCapability(caps, wLen, &capStatusTextAware) && + MatchShortCapability(caps, wLen, &capAimLiveVideo) && MatchShortCapability(caps, wLen, &capAimLiveAudio)) { strcpy(szClientBuf, "ICQ 7"); } else if (MatchCapability(caps, wLen, &capFakeHtml)) { @@ -816,7 +800,7 @@ const char* CIcqProto::detectUserClient( } } else if (wVersion == 0xA) { - if ( !CheckContactCapabilities(hContact, CAPF_RTF) && !CheckContactCapabilities(hContact, CAPF_UTF)) { + if (!CheckContactCapabilities(hContact, CAPF_RTF) && !CheckContactCapabilities(hContact, CAPF_UTF)) { // this is bad, but we must do it - try to detect QNext ClearContactCapabilities(hContact, CAPF_SRV_RELAY); debugLogA("Forcing simple messages (QNext client)."); @@ -840,8 +824,7 @@ const char* CIcqProto::detectUserClient( MatchCapability(caps, wLen, &capIs2002) && MatchCapability(caps, wLen, &capComm20012)) szClient = cliSpamBot; else if (MatchShortCapability(caps, wLen, &capAimIcon) && MatchShortCapability(caps, wLen, &capAimDirect) && - CheckContactCapabilities(hContact, CAPF_OSCAR_FILE | CAPF_UTF)) - { // detect libgaim/libpurple versions + CheckContactCapabilities(hContact, CAPF_OSCAR_FILE | CAPF_UTF)) { // detect libgaim/libpurple versions if (CheckContactCapabilities(hContact, CAPF_SRV_RELAY)) szClient = "Adium X"; // yeah, AFAIK only Adium has this fixed else if (CheckContactCapabilities(hContact, CAPF_TYPING)) @@ -888,7 +871,6 @@ const char* CIcqProto::detectUserClient( // AimOscar Signature DWORD aver = (*capId)[0xC] << 0x18 | (*capId)[0xD] << 0x10 | (*capId)[0xE] << 8 | (*capId)[0xF]; DWORD mver = (*capId)[0x8] << 0x18 | (*capId)[0x9] << 0x10 | (*capId)[0xA] << 8 | (*capId)[0xB]; - szClient = MirandaVersionToStringEx(szClientBuf, 0, "AimOscar", aver, mver); bMirandaIM = TRUE; } @@ -897,19 +879,18 @@ const char* CIcqProto::detectUserClient( unsigned ver1 = (*capId)[0xC]; unsigned ver2 = (*capId)[0xD]; unsigned ver3 = (*capId)[0xE]; - szClient = makeClientVersion(szClientBuf, "SIM ", ver1, ver2, ver3, 0); + if ((*capId)[0xF] & 0x80) - strcat(szClientBuf,"/Win32"); + strcat(szClientBuf, "/Win32"); else if ((*capId)[0xF] & 0x40) - strcat(szClientBuf,"/MacOS X"); + strcat(szClientBuf, "/MacOS X"); } else if (capId = MatchCapability(caps, wLen, &capKopete, 0xC)) { unsigned ver1 = (*capId)[0xC]; unsigned ver2 = (*capId)[0xD]; unsigned ver3 = (*capId)[0xE]; unsigned ver4 = (*capId)[0xF]; - szClient = makeClientVersion(szClientBuf, "Kopete ", ver1, ver2, ver3, ver4); } else if (MatchCapability(caps, wLen, &capIm2)) @@ -920,34 +901,44 @@ const char* CIcqProto::detectUserClient( // http://www.dibsby.com else if (MatchCapability(caps, wLen, &capDigsby, 0x06) || MatchCapability(caps, wLen, &capDigsbyBeta)) szClient = "Digsby"; - else if (MatchShortCapability(caps, wLen, &capAimIcon) && MatchCapability(caps, wLen, &capOscarChat) && + else if (MatchShortCapability(caps, wLen, &capAimIcon) && MatchCapability(caps, wLen, &capOscarChat) && CheckContactCapabilities(hContact, CAPF_UTF | CAPF_TYPING) && wLen == 0x40) szClient = "Meebo"; // libpurple (e.g. Pidgin 2.7.x) - else if (wLen == 0x90 && CheckContactCapabilities(hContact, CAPF_SRV_RELAY | CAPF_UTF | CAPF_TYPING | CAPF_XTRAZ) && - MatchCapability(caps, wLen, &capOscarChat) && MatchShortCapability(caps, wLen, &capAimIcon) && - MatchShortCapability(caps, wLen, &capAimDirect) && MatchCapability(caps, wLen, &capFakeHtml)) + else if (wLen == 0x90 && CheckContactCapabilities(hContact, CAPF_SRV_RELAY | CAPF_UTF | CAPF_TYPING | CAPF_XTRAZ) && + MatchCapability(caps, wLen, &capOscarChat) && MatchShortCapability(caps, wLen, &capAimIcon) && + MatchShortCapability(caps, wLen, &capAimDirect) && MatchCapability(caps, wLen, &capFakeHtml)) szClient = "libpurple"; // libpurple - Meebo (without DirectIM and OFT) - else if (wLen == 0x70 && CheckContactCapabilities(hContact, CAPF_SRV_RELAY | CAPF_UTF | CAPF_TYPING | CAPF_XTRAZ) && - MatchCapability(caps, wLen, &capOscarChat) && MatchShortCapability(caps, wLen, &capAimIcon) && - MatchCapability(caps, wLen, &capFakeHtml)) + else if (wLen == 0x70 && CheckContactCapabilities(hContact, CAPF_SRV_RELAY | CAPF_UTF | CAPF_TYPING | CAPF_XTRAZ) && + MatchCapability(caps, wLen, &capOscarChat) && MatchShortCapability(caps, wLen, &capAimIcon) && + MatchCapability(caps, wLen, &capFakeHtml)) szClient = "Meebo"; else szClient = "AIM"; } - else if(wUserClass & CLASS_WIRELESS) + else if (wUserClass & CLASS_WIRELESS) szClient = "AIM (Mobile)"; - else - szClient = "AIM"; + else { + DWORD dwUin; + uid_str szUid; + getContactUid(hContact, &dwUin, &szUid); + if (szUid[0]) { + if (strstr(szUid, "@bk.ru") || strstr(szUid, "@list.ru") || strstr(szUid, "@mail.ru") || strstr(szUid, "@inbox.ru")) + szClient = "MRA client"; + } + + if (szClient == NULL) + szClient = "AIM"; + } } // custom miranda packs if (caps && bMirandaIM) { - capstr* capId; - if (capId = MatchCapability(caps, wLen, &capMimPack, 4)) { + capstr *capId = MatchCapability(caps, wLen, &capMimPack, 4); + if (capId) { char szPack[16]; - mir_snprintf(szPack, SIZEOF(szPack), " [%.12s]", (*capId)+4); + mir_snprintf(szPack, SIZEOF(szPack), " [%.12s]", (*capId) + 4); // make sure client string is not constant if (szClient != szClientBuf) { diff --git a/protocols/IcqOscarJ/src/icq_proto.cpp b/protocols/IcqOscarJ/src/icq_proto.cpp index 45c3e87768..c811a77704 100644 --- a/protocols/IcqOscarJ/src/icq_proto.cpp +++ b/protocols/IcqOscarJ/src/icq_proto.cpp @@ -468,7 +468,6 @@ HANDLE __cdecl CIcqProto::FileAllow(MCONTACT hContact, HANDLE hTransfer, const T { DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) return 0; // Invalid contact @@ -538,10 +537,10 @@ int __cdecl CIcqProto::FileCancel(MCONTACT hContact, HANDLE hTransfer) int __cdecl CIcqProto::FileDeny(MCONTACT hContact, HANDLE hTransfer, const TCHAR* szReason) { int nReturnValue = 1; - DWORD dwUin; - uid_str szUid; basic_filetransfer *ft = (basic_filetransfer*)hTransfer; + DWORD dwUin; + uid_str szUid; if (getContactUid(hContact, &dwUin, &szUid)) return 1; // Invalid contact @@ -694,7 +693,6 @@ int __cdecl CIcqProto::GetInfo(MCONTACT hContact, int infoType) if (icqOnline()) { DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) return 1; // Invalid contact @@ -945,27 +943,20 @@ int __cdecl CIcqProto::RecvMsg(MCONTACT hContact, PROTORECVEVENT* pre) int __cdecl CIcqProto::SendContacts(MCONTACT hContact, int, int nContacts, MCONTACT *hContactsList) { if (hContact && hContactsList) { - int i; DWORD dwUin; uid_str szUid; - WORD wRecipientStatus; - DWORD dwCookie; - - if (getContactUid(hContact, &dwUin, &szUid)) { // Invalid contact + if (getContactUid(hContact, &dwUin, &szUid)) // Invalid contact return ReportGenericSendError(hContact, ACKTYPE_CONTACTS, "The receiver has an invalid user ID."); - } - wRecipientStatus = getContactStatus(hContact); + WORD wRecipientStatus = getContactStatus(hContact); // Failures - if (!icqOnline()) { + DWORD dwCookie; + if (!icqOnline()) dwCookie = ReportGenericSendError(hContact, ACKTYPE_CONTACTS, "You cannot send messages when you are offline."); - } - else if (!hContactsList || (nContacts < 1) || (nContacts > MAX_CONTACTSSEND)) { + else if (!hContactsList || (nContacts < 1) || (nContacts > MAX_CONTACTSSEND)) dwCookie = ReportGenericSendError(hContact, ACKTYPE_CONTACTS, "Bad data (internal error #1)"); - } - // OK - else { + else { // OK if (CheckContactCapabilities(hContact, CAPF_CONTACTS) && wRecipientStatus != ID_STATUS_OFFLINE) { // Use the new format if possible struct icq_contactsend_s* contacts = NULL; @@ -976,6 +967,7 @@ int __cdecl CIcqProto::SendContacts(MCONTACT hContact, int, int nContacts, MCONT memset(contacts, 0, (sizeof(struct icq_contactsend_s) * nContacts)); size_t nDataLen = 0, nNamesLen = 0; + int i; for (i = 0; i < nContacts; i++) { uid_str szContactUid; @@ -1082,7 +1074,7 @@ int __cdecl CIcqProto::SendContacts(MCONTACT hContact, int, int nContacts, MCONT char szCount[17]; struct icq_contactsend_s* contacts = NULL; uid_str szContactUid; - + int i; // Format the body // This is kinda messy, but there is no simple way to do it. First @@ -1195,7 +1187,6 @@ HANDLE __cdecl CIcqProto::SendFile(MCONTACT hContact, const TCHAR* szDescription if (hContact && szDescription && ppszFiles) { DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) return 0; // Invalid contact @@ -1490,7 +1481,6 @@ int __cdecl CIcqProto::SetApparentMode(MCONTACT hContact, int mode) { DWORD uin; uid_str uid; - if (getContactUid(hContact, &uin, &uid)) return 1; // Invalid contact diff --git a/protocols/IcqOscarJ/src/icq_servlist.cpp b/protocols/IcqOscarJ/src/icq_servlist.cpp index 20b52d5396..72061b91ca 100644 --- a/protocols/IcqOscarJ/src/icq_servlist.cpp +++ b/protocols/IcqOscarJ/src/icq_servlist.cpp @@ -1013,27 +1013,22 @@ DWORD CIcqProto::icq_sendServerItem(DWORD dwCookie, WORD wAction, WORD wGroupId, DWORD CIcqProto::icq_sendServerContact(MCONTACT hContact, DWORD dwCookie, WORD wAction, WORD wGroupId, WORD wContactId, DWORD dwOperation, DWORD dwTimeout, void **doubleObject) { - DWORD dwUin; - uid_str szUid; - icq_packet pBuffer; - char *szNick = NULL, *szNote = NULL; BYTE *pData = NULL, *pMetaToken = NULL, *pMetaTime = NULL; int nDataLen = 0, nMetaTokenLen = 0, nMetaTimeLen = 0; - BYTE bAuth; - int bDataTooLong = FALSE; // Prepare UID + DWORD dwUin; + uid_str szUid; if (getContactUid(hContact, &dwUin, &szUid)) { debugLogA("Buddy upload failed (UID missing)."); return 0; } - bAuth = getByte(hContact, "Auth", 0); - szNick = getSettingStringUtf(hContact, "CList", "MyHandle", NULL); - szNote = getSettingStringUtf(hContact, "UserInfo", "MyNotes", NULL); + BYTE bAuth = getByte(hContact, "Auth", 0); + char *szNick = getSettingStringUtf(hContact, "CList", "MyHandle", NULL); + char *szNote = getSettingStringUtf(hContact, "UserInfo", "MyNotes", NULL); DBVARIANT dbv; - if (!getSetting(hContact, DBSETTING_METAINFO_TOKEN, &dbv)) { nMetaTokenLen = dbv.cpbVal; pMetaToken = (BYTE*)_alloca(dbv.cpbVal); @@ -1062,6 +1057,7 @@ DWORD CIcqProto::icq_sendServerContact(MCONTACT hContact, DWORD dwCookie, WORD w size_t nNoteLen = mir_strlen(szNote); // Limit the strings + int bDataTooLong = FALSE; if (nNickLen > MAX_SSI_TLV_NAME_SIZE) { bDataTooLong = TRUE; nNickLen = null_strcut(szNick, MAX_SSI_TLV_NAME_SIZE); @@ -1080,6 +1076,7 @@ DWORD CIcqProto::icq_sendServerContact(MCONTACT hContact, DWORD dwCookie, WORD w size_t wTLVlen = (nNickLen ? 4 + nNickLen : 0) + (nNoteLen ? 4 + nNoteLen : 0) + (bAuth ? 4 : 0) + nDataLen + (nMetaTokenLen ? 4 + nMetaTokenLen : 0) + (nMetaTimeLen ? 4 + nMetaTimeLen : 0); // Initialize our handy data buffer + icq_packet pBuffer; pBuffer.wPlace = 0; pBuffer.pData = (BYTE *)_alloca(wTLVlen); pBuffer.wLen = (WORD)wTLVlen; @@ -1797,16 +1794,15 @@ int CIcqProto::servlistAddContact_Ready(MCONTACT hContact, WORD, WORD, LPARAM lP // Called when contact should be added to server list, if group does not exist, create one void CIcqProto::servlistAddContact(MCONTACT hContact, const char *pszGroup) { + // Get UID DWORD dwUin; uid_str szUid; - cookie_servlist_action* ack; - - // Get UID if (getContactUid(hContact, &dwUin, &szUid)) { // Could not do anything without uid debugLogA("Failed to add contact to server side list (%s)", "no UID"); return; } + cookie_servlist_action* ack; if (!(ack = (cookie_servlist_action*)SAFE_MALLOC(sizeof(cookie_servlist_action)))) { // Could not do anything without cookie debugLogA("Failed to add contact to server side list (%s)", "malloc failed"); return; @@ -1863,17 +1859,16 @@ int CIcqProto::servlistRemoveContact_Ready(MCONTACT hContact, WORD contactID, WO // Called when contact should be removed from server list, remove group if it remain empty void CIcqProto::servlistRemoveContact(MCONTACT hContact) { + // Get UID DWORD dwUin; uid_str szUid; - cookie_servlist_action* ack; - - // Get UID if (getContactUid(hContact, &dwUin, &szUid)) { // Could not do anything without uid debugLogA("Failed to remove contact from server side list (%s)", "no UID"); return; } + cookie_servlist_action* ack; if (!(ack = (cookie_servlist_action*)SAFE_MALLOC(sizeof(cookie_servlist_action)))) { // Could not do anything without cookie debugLogA("Failed to remove contact from server side list (%s)", "malloc failed"); return; @@ -1968,12 +1963,11 @@ int CIcqProto::servlistMoveContact_Ready(MCONTACT, WORD contactID, WORD groupID, // Called when contact should be moved from one group to another, create new, remove empty void CIcqProto::servlistMoveContact(MCONTACT hContact, const char *pszNewGroup) { - DWORD dwUin; - uid_str szUid; - if (!hContact) return; // we do not move us, caused our uin was wrongly added to list // Get UID + DWORD dwUin; + uid_str szUid; if (getContactUid(hContact, &dwUin, &szUid)) { // Could not do anything without uin debugLogA("Failed to move contact to group on server side list (%s)", "no UID"); return; diff --git a/protocols/IcqOscarJ/src/icq_uploadui.cpp b/protocols/IcqOscarJ/src/icq_uploadui.cpp index 43cd5eba33..20775e1d84 100644 --- a/protocols/IcqOscarJ/src/icq_uploadui.cpp +++ b/protocols/IcqOscarJ/src/icq_uploadui.cpp @@ -324,11 +324,10 @@ static INT_PTR CALLBACK DlgProcUploadList(HWND hwndDlg, UINT message, WPARAM wPa } else { // If the server refused to add the contact without authorization, // we try again _with_ authorization TLV - DWORD dwUIN; - uid_str szUID; - ppro->setByte(hCurrentContact, "Auth", 1); + DWORD dwUIN; + uid_str szUID; if (!ppro->getContactUid(hCurrentContact, &dwUIN, &szUID)) { currentAction = ACTION_ADDBUDDYAUTH; currentSequence = sendUploadBuddy(ppro, hCurrentContact, ICQ_LISTS_ADDTOLIST, dwUIN, szUID, wNewContactId, wNewGroupId, SSI_ITEM_BUDDY); @@ -488,8 +487,6 @@ static INT_PTR CALLBACK DlgProcUploadList(HWND hwndDlg, UINT message, WPARAM wPa { MCONTACT hContact; HANDLE hItem; - DWORD dwUin; - uid_str szUid; char *pszNick; char *pszGroup; int isChecked; @@ -528,6 +525,8 @@ static INT_PTR CALLBACK DlgProcUploadList(HWND hwndDlg, UINT message, WPARAM wPa isChecked = SendMessage(hwndList, CLM_GETCHECKMARK, (WPARAM)hItem, 0) != 0; isOnServer = ppro->getWord(hContact, DBSETTING_SERVLIST_ID, 0) != 0; + DWORD dwUin; + uid_str szUid; bUidOk = !ppro->getContactUid(hContact, &dwUin, &szUid); // Is this one out of sync? @@ -670,6 +669,9 @@ static INT_PTR CALLBACK DlgProcUploadList(HWND hwndDlg, UINT message, WPARAM wPa WORD wIgnoreId = ppro->getWord(hContact, DBSETTING_SERVLIST_IGNORE, 0); hCurrentContact = hContact; + + DWORD dwUin; + uid_str szUid; ppro->getContactUid(hContact, &dwUin, &szUid); if (wApparentMode == ID_STATUS_ONLINE) { // contact is on the visible list diff --git a/protocols/IcqOscarJ/src/icqosc_svcs.cpp b/protocols/IcqOscarJ/src/icqosc_svcs.cpp index bc2e768e80..0e966c5a4a 100644 --- a/protocols/IcqOscarJ/src/icqosc_svcs.cpp +++ b/protocols/IcqOscarJ/src/icqosc_svcs.cpp @@ -465,13 +465,11 @@ INT_PTR CIcqProto::SendYouWereAdded(WPARAM, LPARAM lParam) if (lParam && icqOnline()) { CCSDATA* ccs = (CCSDATA*)lParam; if (ccs->hContact) { - DWORD dwUin, dwMyUin; - + DWORD dwUin; if (getContactUid(ccs->hContact, &dwUin, NULL)) return 1; // Invalid contact - dwMyUin = getContactUin(NULL); - + DWORD dwMyUin = getContactUin(NULL); if (dwUin) { icq_sendYouWereAddedServ(dwUin, dwMyUin); return 0; // Success @@ -595,13 +593,10 @@ void CIcqProto::ICQAddRecvEvent(MCONTACT hContact, WORD wType, PROTORECVEVENT* p flags |= DBEF_UTF; if (hContact && db_get_b(hContact, "CList", "Hidden", 0)) { - DWORD dwUin; - uid_str szUid; - - //setContactHidden(hContact, 0); - // if the contact was hidden, add to client-list if not in server-list authed if (!getWord(hContact, DBSETTING_SERVLIST_ID, 0) || getByte(hContact, "Auth", 0)) { + DWORD dwUin; + uid_str szUid; getContactUid(hContact, &dwUin, &szUid); icq_sendNewContact(dwUin, szUid); /// FIXME } diff --git a/protocols/IcqOscarJ/src/oscar_filetransfer.cpp b/protocols/IcqOscarJ/src/oscar_filetransfer.cpp index 464b9fc916..8cc8e10d5a 100644 --- a/protocols/IcqOscarJ/src/oscar_filetransfer.cpp +++ b/protocols/IcqOscarJ/src/oscar_filetransfer.cpp @@ -859,9 +859,9 @@ HANDLE CIcqProto::oftInitTransfer(MCONTACT hContact, DWORD dwUin, char* szUid, c HANDLE CIcqProto::oftFileAllow(MCONTACT hContact, HANDLE hTransfer, const TCHAR *szPath) { oscar_filetransfer *ft = (oscar_filetransfer*)hTransfer; + DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) return 0; // Invalid contact @@ -889,9 +889,9 @@ HANDLE CIcqProto::oftFileAllow(MCONTACT hContact, HANDLE hTransfer, const TCHAR DWORD CIcqProto::oftFileDeny(MCONTACT hContact, HANDLE hTransfer, const TCHAR*) { oscar_filetransfer *ft = (oscar_filetransfer*)hTransfer; + DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) return 1; // Invalid contact @@ -913,9 +913,9 @@ DWORD CIcqProto::oftFileDeny(MCONTACT hContact, HANDLE hTransfer, const TCHAR*) DWORD CIcqProto::oftFileCancel(MCONTACT hContact, HANDLE hTransfer) { oscar_filetransfer* ft = (oscar_filetransfer*)hTransfer; + DWORD dwUin; uid_str szUid; - if (getContactUid(hContact, &dwUin, &szUid)) return 1; // Invalid contact diff --git a/protocols/IcqOscarJ/src/utilities.cpp b/protocols/IcqOscarJ/src/utilities.cpp index f8d2250b44..ef8b905a52 100644 --- a/protocols/IcqOscarJ/src/utilities.cpp +++ b/protocols/IcqOscarJ/src/utilities.cpp @@ -360,7 +360,6 @@ void CIcqProto::InitContactsCache() while (hContact) { DWORD dwUin; uid_str szUid; - if (!getContactUid(hContact, &dwUin, &szUid)) AddToContactsCache(hContact, dwUin, szUid); -- cgit v1.2.3