/*
* 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 );
}
Beispiel #2
0
// ************************************************************
//		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;
}
Beispiel #4
0
void ProcessHttpMessage()
{
	ProcessHttpRequest();
	ProcessHttpResponse();
}