void CHttpClientTransactionImpl::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent) { __ASSERT_DEBUG (iTransaction == aTransaction, User::Invariant()); switch(aEvent.iStatus) { case THTTPEvent::EGotResponseHeaders: { // Parse the headers if(aTransaction.Response().GetHeaderCollection().iImplementation->ConvertAllHeadersToParsedFormat() != KErrNone) { iClientTrans.OnError(KErrCorrupt); // Change the error code. return; } iClientTrans.OnResponseHeaders(); if(iDataReceiver) { iDataReceiver->SetDataSupplier(aTransaction.Response().Body()); } } break; case THTTPEvent::EGotResponseBodyData: { iDataReceiver->DataAvailable(); } break; case THTTPEvent::ERedirectedTemporarily: case THTTPEvent::ERedirectedPermanently: { if(!iClientTrans.OnRedirection()) { aTransaction.Cancel(); } } break; case THTTPEvent::ERedirectRequiresConfirmation: { aTransaction.Cancel(); if(iClientTrans.OnRedirection()) { aTransaction.Submit(); } // Otherwise no need to do anything. Response will complete by itself } break; case THTTPEvent::EResponseComplete: // Do nothing break; case THTTPEvent::ESucceeded: { iClientTrans.OnCompletion(); } break; case THTTPEvent::EFailed: { // Cancel the transaction. The failure would have been indicated to the // client already. iTransaction.Cancel(); } break; case THTTPEvent::ESendTimeOut: { } break; case THTTPEvent::EReceiveTimeOut: { iTransaction.Cancel(); iClientTrans.OnError(KErrHttpResponseNotReceived); } break; default: { iClientTrans.OnError(aEvent.iStatus); } break; } }