void CHttpClientFilter::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent) { switch( aEvent.iStatus ) { case THTTPEvent::ESubmit: { AlterRequestHeadersL(aTransaction); } break; case THTTPEvent::EGotResponseHeaders: { AlterResponseHeadersL(aTransaction); } break; case KErrHttpNonPipeliningError: case KErrHttpPipeliningError: { // This transaction was being pipelined when an error occurred. Need to // cancel and then re-submit. aTransaction.Cancel(); aTransaction.SubmitL(); } break; default: break; } }
void CTextModeTestMultiTransMalformedStatusLine::CreateSingleTransactionL(RStringF aGet) { // create the transaction and submit TUriParser8 urlParser; urlParser.Parse(*iHostName); RHTTPTransaction tr = iSession.OpenTransactionL(urlParser, *this, aGet); CleanupClosePushL(tr); User::LeaveIfError(iTransArray.Append(tr)); CleanupStack::Pop(&tr); tr.SubmitL(); iOpenTransactionCount++; }
void CHttpTestCase8::DoRunL() { // Literals used in the function _LIT8(KWapTestUrl, "http://WapTestIP/perl/protected/dumpform.pl"); // Replace the host name in the URL HBufC8* newUrl8 = TSrvAddrVal::ReplaceHostNameL(KWapTestUrl(), iIniSettingsFile); CleanupStack::PushL(newUrl8); TPtr8 newUrlPtr8 = newUrl8->Des(); TUriParser8 testURI; testURI.Parse(newUrlPtr8); //open a Session RHTTPSession mySession; mySession.OpenL(); CleanupClosePushL(mySession); iEngine->Utils().LogIt(_L("Session Created(TC8)")); iEngine->Utils().LogIt(_L("Session parameters: Default")); // Install the authorisation plugin. InstallAuthenticationL(mySession); //Get the mySession'string pool handle; iMyStrP = mySession.StringPool(); //Create , open and push in the CS a Transaction in mySession RHTTPTransaction myTransaction; myTransaction = mySession.OpenTransactionL(testURI, *this, mySession.StringPool().StringF(HTTP::EPOST,RHTTPSession::GetTable())); CleanupClosePushL(myTransaction); iEngine->Utils().LogIt(_L("Transaction Created in mySession")); //Get a handle of the request in myTransaction RHTTPRequest myRequest = myTransaction.Request(); RHTTPHeaders myHeaders = myRequest.GetHeaderCollection(); // provide some headers THTTPHdrVal v2(iMyStrP.OpenFStringL(_L8("text/plain"))); THTTPHdrVal v3(iMyStrP.OpenFStringL(_L8("text/html"))); THTTPHdrVal v4(6); myHeaders.SetFieldL(iMyStrP.OpenFStringL(_L8("Accept")),v2 ); myHeaders.SetFieldL(iMyStrP.OpenFStringL(_L8("Content-Type")), v3); myHeaders.SetFieldL(iMyStrP.StringF(HTTP::EContentLength, RHTTPSession::GetTable()),v4); iEngine->Utils().LogIt(_L("Testing Authentication. Method:Post")); myRequest.SetBody(*this); myTransaction.SubmitL(); CActiveScheduler::Start(); myTransaction.Close(); iEngine->Utils().LogIt(_L("Transaction terminated\n")); mySession.Close(); iEngine->Utils().LogIt(_L("Session terminated")); if (iTestFail==1) { User::Leave(-1); } CleanupStack::Pop(2); // mySession,myTansaction CleanupStack::PopAndDestroy(newUrl8); }
// ------------------------------------------------------------------------------------------------ // CHttpFilterProxy::MHFRunL // Process a transaction event. // ------------------------------------------------------------------------------------------------ // void CHttpFilterProxy::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent) { switch(aEvent.iStatus) { case THTTPEvent::ESubmit: { if (LocalHostCheckL(aTransaction, iStringPool)) { return; } SetProxyL(aTransaction); } break; case KErrNotReady: { if (LocalHostCheckL(aTransaction, iStringPool)) { return; } if(iFilterOwnsConnection) { // we must re-start the RConnection TInt err = iConnection.Start(); if (err == KErrAlreadyExists) { // the KErrNotReady must have come from elsewhere return; } User::LeaveIfError(err); // re-submit the transaction aTransaction.Cancel(); aTransaction.SubmitL(); } break; } default: break; } }
void CTextModeTestMultiTrans::CreateTransArrayL() { // Open several transactions, all with a URL of the form http://xxx/y.txt where y is from 1 to iMaxNumTransactions TBuf8<50> url; RStringF get = iSession.StringPool().StringF(HTTP::EGET,RHTTPSession::GetTable()); iOpenTransactionCount = 0; for (TInt ii = 1; ii <= iMaxNumTransactions; ii++) { // create the transaction and submit url.Zero(); url.Format(KHttpMultiTransUrlFormat(), iHostName); url.Append(TChar(ii + 48)); url.Append(KHttpMultiTransUrlExtn()); TUriParser8 urlParser; urlParser.Parse(url); RHTTPTransaction tr = iSession.OpenTransactionL(urlParser, *this, get); CleanupClosePushL(tr); User::LeaveIfError(iTransArray.Append(tr)); CleanupStack::Pop(&tr); tr.SubmitL(); iOpenTransactionCount++; } }
void CHttpTestCase4::DoRunL() { // Literals used in the function _LIT8(KWapTestUrl, "http://WapTestIP/perl/dumpform.pl"); // Replace the host name in the URL HBufC8* newUrl8 = TSrvAddrVal::ReplaceHostNameL(KWapTestUrl(), iIniSettingsFile); CleanupStack::PushL(newUrl8); TPtr8 newUrlPtr8 = newUrl8->Des(); TUriParser8 testURI; testURI.Parse(newUrlPtr8); //open a Session RHTTPSession mySession; mySession.OpenL(); CleanupClosePushL(mySession); iEngine->Utils().LogIt(_L("Session Created(TC4)")); iEngine->Utils().LogIt(_L("Session parameters: Default")); //Get the mySession'string pool handle; iMyStrP = mySession.StringPool(); //get strings this testcase needs RStringF textPlain = iMyStrP.StringF(HTTP::ETextPlain, RHTTPSession::GetTable()); RStringF textHtml = iMyStrP.StringF(HTTP::ETextHtml, RHTTPSession::GetTable()); RStringF mimeType = iMyStrP.StringF(HTTP::EApplicationXWwwFormUrlEncoded, RHTTPSession::GetTable()); //Open a Transaction in mySession RHTTPTransaction myTransaction; myTransaction = mySession.OpenTransactionL(testURI, *this, iMyStrP.StringF(HTTP::EPOST,RHTTPSession::GetTable())); CleanupClosePushL(myTransaction); iEngine->Utils().LogIt(_L("Transaction Created in mySession")); //Get a handle of the request in myTransaction RHTTPRequest myRequest = myTransaction.Request(); RHTTPHeaders myHeaders = myRequest.GetHeaderCollection(); //provide some headers THTTPHdrVal v2(textPlain); THTTPHdrVal v3(textHtml); THTTPHdrVal v4(6); THTTPHdrVal v5(mimeType); myHeaders.SetFieldL(iMyStrP.StringF(HTTP::EAccept,RHTTPSession::GetTable()),v2); myHeaders.SetFieldL(iMyStrP.StringF(HTTP::EAccept,RHTTPSession::GetTable()),v3); myHeaders.SetFieldL(iMyStrP.StringF(HTTP::EContentLength,RHTTPSession::GetTable()),v4); myHeaders.SetFieldL(iMyStrP.StringF(HTTP::EContentType,RHTTPSession::GetTable()), v5); TSrvAddrVal::LogUsing8BitDesL(iEngine, newUrlPtr8); iEngine->Utils().LogIt(_L("Method:Post")); iEngine->Utils().LogIt(_L("Accept:test/plain,text/html")); iEngine->Utils().LogIt(_L("Content-Type: application/x-www-form-urlencoded")); iEngine->Utils().LogIt(_L("Content-Length: 6")); myRequest.SetBody(*this); myTransaction.SubmitL(); CActiveScheduler::Start(); //close Transaction and session myTransaction.Close(); iEngine->Utils().LogIt(_L("Transaction terminated\n")); mySession.Close(); iEngine->Utils().LogIt(_L("Session terminated")); if (iTestFail==1) { User::Leave(-1); } CleanupStack::Pop(2); // mySession, myTansaction CleanupStack::PopAndDestroy(newUrl8); }
//------------------------------------------------------------------------ // CTestFilter::CheckHeadersL // Check HTTP headers and extract MIME type //------------------------------------------------------------------------ // void CTestFilter::CheckHeadersL( RHTTPTransaction& aTrans ) { // read the header data and check the MIME type here // check the status and body RHTTPResponse response = aTrans.Response(); TInt status = response.StatusCode(); THTTPHdrVal fieldVal; // check if status == 401 and realm is 3GPP then we need to bootstrap, if we are already bootstrappign this is the second call if( status == HTTPStatus::EUnauthorized ) { TInt headerPart=0; THTTPHdrVal headerVal; RStringF wwwAuthHeader = iStringPool.StringF(HTTP::EWWWAuthenticate,RHTTPSession::GetTable()); RHTTPHeaders headers(aTrans.Response().GetHeaderCollection()); RString realm; THTTPHdrVal hdrVal; if (!headers.GetParam(wwwAuthHeader, iStringPool.StringF(HTTP::ERealm,RHTTPSession::GetTable()), hdrVal, headerPart)) { realm = hdrVal; const TDesC8& val = realm.DesC(); if (headerPart == KErrNotFound) return; THTTPHdrVal authTypeParam; RHTTPTransactionPropertySet propSet = aTrans.PropertySet(); // if we are already bootstrapping results will be retrieved when request is resubmitted iBootstrapPending = ETrue; TTimeIntervalMicroSeconds32 aInterval(20000000); iTimeOut->Start(aInterval); //Start the http post request timer, aInterval - timeout in micro-seconds if(!iBootstrapWait.IsStarted()) { iBootstrapWait.Start(); } if( iHaveCredentials ) { RHTTPTransactionPropertySet propSet = aTrans.PropertySet(); //user name/pass word for accessing http://replab.nrln.net/digest/ //username: dummy, password: dummy TBuf8<KB64KeySize> keyBase64(_L8("Aladdin")); TBuf8<KB64KeySize> keyBase64Username(_L8("open sesame"));; RString username = iStringPool.OpenStringL( keyBase64 ); CleanupClosePushL<RString>( username ); RString password = iStringPool.OpenStringL( keyBase64Username ); CleanupClosePushL<RString>( password ); propSet.SetPropertyL( iUsernameStr, username ); propSet.SetPropertyL( iPasswordStr, password ); CleanupStack::PopAndDestroy(&password); CleanupStack::PopAndDestroy(&username); //Cancel the transaction aTrans.Cancel(); // Re-submit the http request with much needed credentials aTrans.SubmitL(); } else { //Since bootstrapping failed,Do not have to resubmit the http request ? return; } } } }