void CIwHTTPQueue::Update() { if (m_Request.size()) { if (g_GotResult) { m_HTTP.Cancel(); g_GotResult = false; Request request = m_Request[0]; m_Request.erase(0); if (g_Result) { // Call the requests callback with the received data if (request.Callback) { request.Callback(request.pArgument, (const char*)g_szContentType, g_Result, g_ResultLen); } // Free result s3eFree(g_Result); g_szContentType[0] = 0; g_Result = 0; } else { if (request.CallbackError) { request.CallbackError(request.pArgument); } } delete[] (char*)request.pURL; // Begin fetching the next request if (m_Request.size()) { if (m_Request[0].Callback) { if (m_Request[0].usePost) { m_timeout = m_Request[0].timeout; m_requestStart = s3eTimerGetMs(); m_HTTP.Post(m_Request[0].pURL, m_Request[0].szBuffer, m_Request[0].bufferLen, GotHeaders, NULL); } else { m_timeout = m_Request[0].timeout; m_requestStart = s3eTimerGetMs(); m_HTTP.Get(m_Request[0].pURL, GotHeaders, NULL); } } else { g_GotResult = true; } } } else { uint64 now = s3eTimerGetMs(); if (m_Request[0].timeout != -1 && (now - m_requestStart) > m_Request[0].timeout) { m_Request[0].timeout = -1; g_GotResult = true; m_HTTP.Cancel(); s3eDeviceYield(0); } } } }