diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/src/TSecureConnection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/src/TSecureConnection.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,314 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include +#include "TSecureConnection.h" + + +// PDD names for the physical device drivers that are loaded in wins or arm +#if defined (__WINS__) +#define PDD_NAME _L("ECDRV") +#else +#define PDD_NAME _L("EUART1") +#define PDD2_NAME _L("EUART2") +#define PDD3_NAME _L("EUART3") +#define PDD4_NAME _L("EUART4") +#endif +#define LDD_NAME _L("ECOMM") + +_LIT8(KUserAgent, "SimpleHTTPClient (1.0)"); +_LIT8(KAccept, "*/*"); + +CTSecureConnectionStep::CTSecureConnectionStep(const TDesC& aStepName) + { + SetTestStepName( aStepName ); + } + +CTSecureConnectionStep::~CTSecureConnectionStep() + { + } + +TVerdict CTSecureConnectionStep::doTestStepPreambleL() + { + INFO_PRINTF1(_L("CTSecureConnectionStep Check Start")); + + InitCommsL(); + User::LeaveIfError(iFs.Connect()); + ConvertDlgConfigL(); + + iScheduler=new(ELeave) CActiveScheduler; + CActiveScheduler::Install(iScheduler); + + SetTestStepResult(EPass); + return TestStepResult(); + } + +TVerdict CTSecureConnectionStep::doTestStepL() + { + TPtrC url; + if(!GetStringFromConfig(ConfigSection(), KUrl, url)) + { + ERR_PRINTF1(_L("Missing url")); + SetTestStepError(KErrBadName); + SetTestStepResult(EFail); + } + + iHttp=CSimpleHttpClient::NewL(this); + iHttp->StartClientL(url); + + return TestStepResult(); + } + +TVerdict CTSecureConnectionStep::doTestStepPostambleL() + { + INFO_PRINTF1(_L("CTSecureConnectionStep Check Done")); + iFs.Close(); + delete iScheduler; + return TestStepResult(); + } + +void CTSecureConnectionStep::WriteDialogRecordL(RFileWriteStream& aStream, TSecurityDialogOperation aOp, const TDesC& aLabelSpec, + const TDesC& aResponse1, const TDesC& aResponse2) + { + MStreamBuf* streamBuf = aStream.Sink(); + streamBuf->SeekL(MStreamBuf::EWrite, EStreamEnd); + aStream.WriteInt32L(aOp); + aStream.WriteInt32L(aLabelSpec.Length()); + aStream.WriteL(aLabelSpec); + aStream.WriteInt32L(aResponse1.Length()); + aStream.WriteL(aResponse1); + aStream.WriteInt32L(aResponse2.Length()); + aStream.WriteL(aResponse2); + } + +void CTSecureConnectionStep::InitCommsL() + { + // StartC32 + TInt ret = User::LoadPhysicalDevice(PDD_NAME); + User::LeaveIfError(ret == KErrAlreadyExists?KErrNone:ret); + +#ifndef __WINS__ + ret = User::LoadPhysicalDevice(PDD2_NAME); + ret = User::LoadPhysicalDevice(PDD3_NAME); + ret = User::LoadPhysicalDevice(PDD4_NAME); +#endif + + ret = User::LoadLogicalDevice(LDD_NAME); + User::LeaveIfError(ret == KErrAlreadyExists?KErrNone:ret); + ret = StartC32(); + User::LeaveIfError(ret == KErrAlreadyExists?KErrNone:ret); + } + +void CTSecureConnectionStep::ConvertDlgConfigL() + { + //Clean the response files + CFileMan* fileMan = CFileMan::NewL(iFs); + CleanupStack::PushL(fileMan); + + TDriveUnit sysDrive (RFs::GetSystemDrive()); + TDriveName sysDriveName (sysDrive.Name()); + + TBuf<128> datFile (sysDriveName); + datFile.Append(KTSecDlgOutputFile); + TInt err = fileMan->Delete(datFile); + if (err != KErrNotFound) + User::LeaveIfError(err); + + datFile.Copy(sysDriveName); + datFile.Append(KTSecDlgInputFile); + + err = fileMan->Delete(datFile); + if (err != KErrNotFound) + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy(fileMan); + + //Create the response input file + RFileWriteStream stream; + err = stream.Open(iFs, datFile, EFileWrite | EFileShareExclusive); + if (err == KErrNotFound) + { + err = stream.Create(iFs, datFile, EFileWrite | EFileShareExclusive); + } + User::LeaveIfError(err); + stream.PushL(); + + // Read the dialog response data + TPtrC res1; + if (GetStringFromConfig(ConfigSection(), KServerAuthenticationResponse, res1)) + { + WriteDialogRecordL(stream, EServerAuthenticationFailure, _L("Server Authentication Dialog"), res1, KNullDesC); + } + + TPtrC res3, res4; + if (GetStringFromConfig(ConfigSection(), KClientAuthenticationResponse1, res3) && GetStringFromConfig(ConfigSection(), KClientAuthenticationResponse2, res4)) + { + WriteDialogRecordL(stream, ESecureConnection, _L("Client Authentication Dialog"), res3, res4); + } + + TPtrC res5; + if (!GetStringFromConfig(ConfigSection(), KKeyStorePassPhrase, res5)) + { + res5.Set(_L("pinkcloud")); + } + WriteDialogRecordL(stream, EEnterPIN, _L("Key store passphrase"), res5, KNullDesC); + + stream.CommitL(); + CleanupStack::PopAndDestroy(); // stream + } + +void CTSecureConnectionStep::ReceiveTestResult(const TInt& aErrorCode, TVerdict aVerdict) + { + SetTestStepError(aErrorCode); + SetTestStepResult(aVerdict); + } + +CSimpleHttpClient* CSimpleHttpClient::NewLC(CTSecureConnectionStep* aStep) + { + CSimpleHttpClient* me = new(ELeave) CSimpleHttpClient; + CleanupStack::PushL(me); + me->ConstructL(aStep); + return me; + } + +CSimpleHttpClient* CSimpleHttpClient::NewL(CTSecureConnectionStep* aStep) + { + CSimpleHttpClient* me = NewLC(aStep); + CleanupStack::Pop(me); + return me; + } + +CSimpleHttpClient::~CSimpleHttpClient() + { + iSess.Close(); + delete iTransObs; + } + +void CSimpleHttpClient::ConstructL(CTSecureConnectionStep* aStep) + { + // Open the RHTTPSession + iSess.OpenL(); + iTransObs = CHttpEventHandler::NewL(aStep); + iTestStep=aStep; + } + +void CSimpleHttpClient::StartClientL(TDesC& aUrl) + { + RStringPool strP = iSess.StringPool(); + RStringF method; + method = strP.StringF(HTTP::EGET,RHTTPSession::GetTable()); + + // Start the method off + TBuf8<256> url8; + url8.Copy(aUrl); + InvokeHttpMethodL(url8, method); + } + +void CSimpleHttpClient::InvokeHttpMethodL(const TDesC8& aUri, RStringF aMethod) + { + TUriParser8 uri; + uri.Parse(aUri); + iTrans = iSess.OpenTransactionL(uri, *iTransObs, aMethod); + RHTTPHeaders hdr = iTrans.Request().GetHeaderCollection(); + + SetHeaderL(hdr, HTTP::EUserAgent, KUserAgent); + SetHeaderL(hdr, HTTP::EAccept, KAccept); + iTrans.SubmitL(); + + CActiveScheduler::Start(); + } + +void CSimpleHttpClient::SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue) + { + RStringF valStr = iSess.StringPool().OpenFStringL(aHdrValue); + THTTPHdrVal val(valStr); + aHeaders.SetFieldL(iSess.StringPool().StringF(aHdrField,RHTTPSession::GetTable()), val); + valStr.Close(); + } + +CHttpEventHandler* CHttpEventHandler::NewLC(CTSecureConnectionStep* aStep) + { + CHttpEventHandler* me = new(ELeave)CHttpEventHandler(); + CleanupStack::PushL(me); + me->ConstructL(aStep); + return me; + } + +CHttpEventHandler* CHttpEventHandler::NewL(CTSecureConnectionStep* aStep) + { + CHttpEventHandler* me = NewLC(aStep); + CleanupStack::Pop(me); + return me; + } +void CHttpEventHandler::ConstructL(CTSecureConnectionStep* aStep) + { + iTestStep=aStep; + } + +void CHttpEventHandler::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent) + { + switch (aEvent.iStatus) + { + case THTTPEvent::EGotResponseHeaders: + { + } break; + case THTTPEvent::EGotResponseBodyData: + { + iRespBody = aTransaction.Response().Body(); + iRespBody->ReleaseData(); + } break; + case THTTPEvent::EResponseComplete: + { + } break; + case THTTPEvent::ESucceeded: + { + aTransaction.Close(); + CActiveScheduler::Stop(); + } break; + case THTTPEvent::EFailed: + { + aTransaction.Close(); + CActiveScheduler::Stop(); + } break; + case THTTPEvent::ERedirectedPermanently: + { + } break; + case THTTPEvent::ERedirectedTemporarily: + { + } break; + case THTTPEvent::ERedirectRequiresConfirmation: + { + aTransaction.Close(); + CActiveScheduler::Stop(); + } break; + default: + { + if (aEvent.iStatus < 0) + { + iTestStep->ReceiveTestResult(aEvent.iStatus, EFail); + aTransaction.Close(); + CActiveScheduler::Stop(); + } + } break; + } + } + +TInt CHttpEventHandler::MHFRunError(TInt /*aError*/, RHTTPTransaction /*aTransaction*/, const THTTPEvent& /*aEvent*/) + { + return KErrNone; + } + +