int icq_httpGatewayInit(HANDLE hConn, NETLIBOPENCONNECTION *nloc, NETLIBHTTPREQUEST *nlhr) { // initial response from ICQ http gateway WORD wLen, wVersion, wType; WORD wIpLen; DWORD dwSid1, dwSid2, dwSid3, dwSid4; BYTE *buf; char szSid[33], szHttpServer[256], szHttpGetUrl[300], szHttpPostUrl[300]; NETLIBHTTPPROXYINFO nlhpi = {0}; if (nlhr->dataLength < 31) { SetLastError(ERROR_INVALID_DATA); return 0; } buf = (PBYTE)nlhr->pData; unpackWord(&buf, &wLen); unpackWord(&buf, &wVersion); /* always 0x0443 */ unpackWord(&buf, &wType); /* hello reply */ buf += 6; /* dunno */ unpackDWord(&buf, &dwSid1); unpackDWord(&buf, &dwSid2); unpackDWord(&buf, &dwSid3); unpackDWord(&buf, &dwSid4); null_snprintf(szSid, 33, "%08x%08x%08x%08x", dwSid1, dwSid2, dwSid3, dwSid4); unpackWord(&buf, &wIpLen); if(nlhr->dataLength < 30 + wIpLen || wIpLen == 0 || wIpLen > sizeof(szHttpServer) - 1) { SetLastError(ERROR_INVALID_DATA); return 0; } SetGatewayIndex(hConn, 1); // new master connection begins here memcpy(szHttpServer, buf, wIpLen); szHttpServer[wIpLen] = '\0'; nlhpi.cbSize = sizeof(nlhpi); nlhpi.flags = NLHPIF_USEPOSTSEQUENCE; nlhpi.szHttpGetUrl = szHttpGetUrl; nlhpi.szHttpPostUrl = szHttpPostUrl; nlhpi.firstPostSequence = 1; null_snprintf(szHttpGetUrl, 300, "http://%s/monitor?sid=%s", szHttpServer, szSid); null_snprintf(szHttpPostUrl, 300, "http://%s/data?sid=%s&seq=", szHttpServer, szSid); return CallService(MS_NETLIB_SETHTTPPROXYINFO, (WPARAM)hConn, (LPARAM)&nlhpi); }
void CIcqProto::icq_LogFatalParam(const char *szMsg, WORD wError) { char str[MAX_PATH]; char buf[MAX_PATH]; null_snprintf(buf, MAX_PATH, ICQTranslateUtfStatic(szMsg, str, MAX_PATH), wError); icq_LogMessage(LOG_FATAL, buf); }
IcqIconHandle IconLibDefine(const char *desc, const char *section, const char *module, const char *ident, const TCHAR *def_file, int def_idx) { SKINICONDESC sid = {0}; sid.cbSize = SKINICONDESC_SIZE; sid.pwszSection = make_unicode_string(section); sid.pwszDescription = make_unicode_string(desc); sid.flags = SIDF_UNICODE | SIDF_PATH_TCHAR; char szName[MAX_PATH + 128]; null_snprintf(szName, sizeof(szName), "%s_%s", module ? module : ICQ_PROTOCOL_NAME, ident); sid.pszName = szName; sid.ptszDefaultFile = (TCHAR*)def_file; sid.iDefaultIndex = def_idx; IcqIconHandle hIcon = (IcqIconHandle)SAFE_MALLOC(sizeof(IcqIconHandle_s)); hIcon->szName = null_strdup(sid.pszName); hIcon->hIcoLib = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); SAFE_FREE(&sid.pwszSection); SAFE_FREE(&sid.pwszDescription); return hIcon; }
void CIcqProto::icq_LogUsingErrorCode(int level, DWORD dwError, const char *szMsg) { char szBuf[1024]; char str[1024]; char str2[64]; char szErrorMsg[512]; char *pszErrorMsg = NULL; int bNeedFree = FALSE; switch(dwError) { case ERROR_TIMEOUT: case WSAETIMEDOUT: pszErrorMsg = LPGEN("The server did not respond to the connection attempt within a reasonable time, it may be temporarily down. Try again later."); break; case ERROR_GEN_FAILURE: pszErrorMsg = LPGEN("The connection with the server was abortively closed during the connection attempt. You may have lost your local network connection."); break; case WSAEHOSTUNREACH: case WSAENETUNREACH: pszErrorMsg = LPGEN("Miranda was unable to resolve the name of a server to its numeric address. This is most likely caused by a catastrophic loss of your network connection (for example, your modem has disconnected), but if you are behind a proxy, you may need to use the 'Resolve hostnames through proxy' option in M->Options->Network."); break; case WSAEHOSTDOWN: case WSAENETDOWN: case WSAECONNREFUSED: pszErrorMsg = LPGEN("Miranda was unable to make a connection with a server. It is likely that the server is down, in which case you should wait for a while and try again later."); break; case ERROR_ACCESS_DENIED: pszErrorMsg = LPGEN("Your proxy rejected the user name and password that you provided. Please check them in M->Options->Network."); break; case WSAHOST_NOT_FOUND: case WSANO_DATA: pszErrorMsg = LPGEN("The server to which you are trying to connect does not exist. Check your spelling in M->Options->Network->ICQ."); break; default: { TCHAR err[512]; if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, 0, err, SIZEOF(err), NULL)) { #if defined( _UNICODE ) pszErrorMsg = make_utf8_string(err); #else utf8_encode(err, &pszErrorMsg); #endif bNeedFree = TRUE; } break; } } null_snprintf(szBuf, sizeof(szBuf), "%s%s%s (%s %d)", szMsg ? ICQTranslateUtfStatic(szMsg, str, 1024) : "", szMsg ? "\r\n\r\n" : "", ICQTranslateUtfStatic(pszErrorMsg, szErrorMsg, 512), ICQTranslateUtfStatic(LPGEN("error"), str2, 64), dwError); if (bNeedFree) SAFE_FREE(&pszErrorMsg); icq_LogMessage(level, szBuf); }