void CSkypeProto::OnEndpointCreated(const NETLIBHTTPREQUEST *response) { if (!IsStatusConnecting(m_iStatus)) return; m_iStatus++; if (response == NULL) { debugLogA(__FUNCTION__ ": failed to get create endpoint"); ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_FAILED, NULL, LOGIN_ERROR_UNKNOWN); SetStatus(ID_STATUS_OFFLINE); return; } for (int i = 0; i < response->headersCount; i++) { if (!mir_strcmpi(response->headers[i].szName, "Set-RegistrationToken")) { CMStringA szValue = response->headers[i].szValue, szCookieName, szCookieVal; int iStart = 0; while (true) { CMStringA szToken = szValue.Tokenize(";", iStart).Trim(); if (iStart == -1) break; int iStart2 = 0; szCookieName = szToken.Tokenize("=", iStart2); szCookieVal = szToken.Mid(iStart2); setString(szCookieName, szCookieVal); } } else if (!mir_strcmpi(response->headers[i].szName, "Location")) { CMStringA szValue = response->headers[i].szValue; li.endpoint.szServer = GetServerFromUrl(szValue).Detach(); setString("Server", li.endpoint.szServer); } } if (m_iStatus++ > SKYPE_MAX_CONNECT_RETRIES) { debugLogA(__FUNCTION__ ": failed to create endpoint (too many connect retries)"); ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_FAILED, NULL, LOGIN_ERROR_UNKNOWN); SetStatus(ID_STATUS_OFFLINE); return; } if (response->resultCode != 201) { if (response->resultCode == 401) { delSetting("TokenExpiresIn"); SendRequest(new LoginOAuthRequest(li.szSkypename, ptrA(getStringA(SKYPE_SETTINGS_PASSWORD))), &CSkypeProto::OnLoginOAuth); return; } else //it should be rewritten { SendRequest(new CreateEndpointRequest(li), &CSkypeProto::OnEndpointCreated); return; } } li.endpoint.szToken = getStringA("registrationToken"); li.endpoint.szId = getStringA("endpointId"); SendRequest(new CreateSubscriptionsRequest(li), &CSkypeProto::OnSubscriptionsCreated); }
INT_PTR __cdecl CIrcProto::Scripting_GetIrcData(WPARAM, LPARAM lparam) { if (m_scriptingEnabled && lparam) { CMStringA sString = (char*)lparam, sRequest; CMString sOutput, sChannel; int i = sString.Find("|"); if (i != -1) { sRequest = sString.Mid(0, i); TCHAR* p = mir_a2t(sString.Mid(i + 1)); sChannel = p; mir_free(p); } else sRequest = sString; sRequest.MakeLower(); if (sRequest == "ownnick" && IsConnected()) sOutput = m_info.sNick; else if (sRequest == "network" && IsConnected()) sOutput = m_info.sNetwork; else if (sRequest == "primarynick") sOutput = m_nick; else if (sRequest == "secondarynick") sOutput = m_alternativeNick; else if (sRequest == "myip") return (INT_PTR)mir_strdup(m_manualHost ? m_mySpecifiedHostIP : (m_IPFromServer) ? m_myHost : m_myLocalHost); else if (sRequest == "usercount" && !sChannel.IsEmpty()) { CMString S = MakeWndID(sChannel.c_str()); GC_INFO gci = { 0 }; gci.Flags = GCF_BYID | GCF_COUNT; gci.pszModule = m_szModuleName; gci.pszID = S.c_str(); if (!CallServiceSync(MS_GC_GETINFO, 0, (LPARAM)&gci)) { TCHAR szTemp[40]; mir_sntprintf(szTemp, _T("%u"), gci.iCount); sOutput = szTemp; } } else if (sRequest == "userlist" && !sChannel.IsEmpty()) { CMString S = MakeWndID(sChannel.c_str()); GC_INFO gci = { 0 }; gci.Flags = GCF_BYID | GCF_USERS; gci.pszModule = m_szModuleName; gci.pszID = S.c_str(); if (!CallServiceSync(MS_GC_GETINFO, 0, (LPARAM)&gci)) return (INT_PTR)mir_strdup(gci.pszUsers); } else if (sRequest == "channellist") { CMString S = _T(""); int n = CallServiceSync(MS_GC_GETSESSIONCOUNT, 0, (LPARAM)m_szModuleName); if (n >= 0) { int j = 0; while (j < n) { GC_INFO gci = { 0 }; gci.Flags = GCF_BYINDEX | GCF_ID; gci.pszModule = m_szModuleName; gci.iItem = j; if (!CallServiceSync(MS_GC_GETINFO, 0, (LPARAM)&gci)) { if (mir_tstrcmpi(gci.pszID, SERVERWINDOW)) { CMString S1 = gci.pszID; int k = S1.Find(_T(" ")); if (k != -1) S1 = S1.Mid(0, k); S += S1 + _T(" "); } } j++; } } if (!S.IsEmpty()) sOutput = (TCHAR*)S.c_str(); } // send it to mbot if (!sOutput.IsEmpty()) return (INT_PTR)mir_t2a(sOutput.c_str()); } return 0; }