/* * This is called when message handler gets sbee data request from gps daemon. */ void sbeeClient_ProcessSbeeData( t_sbee_si_SbeeDataParams *sbeeData) { int8_t resString[SBEE_REQUEST_STRING_LENGTH]; int8_t vl_serverAddress[SBEE_SERVER_ADDRESS_LENGTH]; snprintf( (char *)resString, sbeeData->a_SbeeData.v_Length + 1,"%s", (char *)sbeeData->a_SbeeData.p_Pointer ); snprintf( (char *)vl_serverAddress, sbeeDataConnectionParams.a_ServerAddress.v_Length + 1, "%s", (char *)sbeeDataConnectionParams.a_ServerAddress.p_Pointer ); //Connect to server with the request string, server address and port number ProcessHttpRequest( (char *)resString, (char *)vl_serverAddress, sbeeDataConnectionParams.v_PortNumber ); }
// ************************************************************ // GetTileHttpData() // ************************************************************ CMemoryBitmap* BaseProvider::GetTileHttpData(CString url, CString shortUrl, bool recursive) { SecureHttpClient client; CAtlNavigateData navData; navData.dwReadBlockSize = 262144; client.SetProxyAndAuthentication(_proxyUsername, _proxyPassword, _proxyDomain); PreventParallelExecution(); bool success = client.Navigate(url, &navData); CMemoryBitmap* bmp = ProcessHttpRequest(reinterpret_cast<void*>(&client), url, shortUrl, success); if (!success && !recursive && client.GetStatus() == -1) { // it's a socket error, so let's try one more time Sleep(20); tilesLogger.Log("Reloading attempt: " + m_globalSettings.useShortUrlForTiles ? shortUrl : url); bmp = GetTileHttpData(url, shortUrl, true); } return bmp; }
bool CHttpClientReqSocket::ProcessHttpPacket(const BYTE* pucData, UINT uSize) { if (GetHttpState() == HttpStateRecvExpected || GetHttpState() == HttpStateRecvHeaders) { // search for EOH LPBYTE pBody = NULL; int iSizeBody = 0; ProcessHttpHeaderPacket((const char*)pucData, uSize, pBody, iSizeBody); if (pBody) // EOH found, packet may contain partial body { if (thePrefs.GetDebugClientTCPLevel() > 0){ Debug(_T("Received HTTP\n")); DebugHttpHeaders(m_astrHttpHeaders); } // PC-TODO: Should be done right in 'ProcessHttpHeaderPacket' int iSizeHeader = 2; for (int i = 0; i < m_astrHttpHeaders.GetCount(); i++) iSizeHeader += m_astrHttpHeaders[i].GetLength() + 2; theStats.AddDownDataOverheadFileRequest(iSizeHeader); if (iSizeBody < 0) throw CString(_T("Internal HTTP header/body parsing error")); if (m_astrHttpHeaders[0].GetLength() >= 4 && memcmp((LPCSTR)m_astrHttpHeaders[0], "HTTP", 4) == 0) { if (!ProcessHttpResponse()) return false; SetHttpState(HttpStateRecvBody); if (iSizeBody > 0){ // packet contained HTTP headers and (partial) body ProcessHttpResponseBody(pBody, iSizeBody); } else{ // packet contained HTTP headers but no body (packet terminates with EOH) // body will be processed because of HTTP state 'HttpStateRecvBody' with next recv ; } } else if (m_astrHttpHeaders[0].GetLength() >= 3 && memcmp((LPCSTR)m_astrHttpHeaders[0], "GET", 3) == 0) { if (!ProcessHttpRequest()) return false; if (iSizeBody != 0){ ASSERT(0); // no body for GET requests allowed yet return false; } } else throw CString(_T("Invalid HTTP header received")); } else { TRACE("+++ Received partial HTTP header packet\n"); } } else if (GetHttpState() == HttpStateRecvBody) { ProcessHttpResponseBody(pucData, uSize); } else{ theStats.AddDownDataOverheadFileRequest(uSize); throw CString(_T("Invalid HTTP socket state")); } return true; }
void ProcessHttpMessage() { ProcessHttpRequest(); ProcessHttpResponse(); }