--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/Test/TestScriptTest/CPipeliningTestParams.cpp Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,803 @@
+// Copyright (c) 2003-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 "CPipeliningTestParams.h"
+#include "httptestutils.h"
+#include "CPipeliningTestCase.h"
+
+
+const TUint KDoubleQuote ('"');
+_LIT(KScriptLF, "\\n");
+_LIT(KReplaceLF, "\n");
+_LIT8(KScriptLF8, "\\n");
+_LIT8(KReplaceLF8, "\n");
+
+_LIT(KScriptCR, "\\r");
+_LIT(KReplaceCR, "\r");
+_LIT8(KScriptCR8, "\\r");
+_LIT8(KReplaceCR8, "\r");
+
+
+
+
+TInt err(0);
+//Helper function to convert TPtr to TInt
+static TInt Ptr2Int(const TDesC& aPtr)
+ {
+ TInt aInt;
+ TLex aLex(aPtr);
+ aLex.Val(aInt);
+ return aInt;
+ }
+
+void CheckSetHeaderValueL(const TDesC& aTransInfoBuf, const TDesC& aHeader2Check, TransInfo& aTransInfo, const TInt aLocationInHeaderArr)
+ {
+ TChar commaChar (',');
+ TChar colonChar (':');
+ TInt locationOfDes = aTransInfoBuf.Match(aHeader2Check);
+
+ if (locationOfDes != KErrNotFound)//the header has been found in the input string
+ {
+ TPtrC subString = aTransInfoBuf.Mid(locationOfDes);
+ TInt commaDelimterPos = subString.Locate(commaChar);
+ TPtrC headerFieldValuePairString = subString.Mid(locationOfDes, (commaDelimterPos != KErrNotFound ? commaDelimterPos:subString.Length()));
+ TInt colonDelimterPos = headerFieldValuePairString.Locate(colonChar);
+ TPtrC headerVal = headerFieldValuePairString.Mid(colonDelimterPos+1 );
+ HBufC *headerValueBuf = HBufC::NewLC(headerVal.Size());
+ (headerValueBuf->Des()).Copy(headerVal);
+ User::LeaveIfError(aTransInfo.TransHeaderInfoPtrArr.Append(headerValueBuf));
+ User::LeaveIfError(aTransInfo.TransHeaderTypeArr.Insert(((aTransInfo.TransHeaderInfoPtrArr.Count()) - 1),aLocationInHeaderArr));
+ CleanupStack::Pop(headerValueBuf);
+ }
+ else//header is not present in the string
+ {
+ aTransInfo.TransHeaderTypeArr.Insert( ( -1 ), aLocationInHeaderArr );
+ }
+ }
+
+
+CPipeliningTestParams* CPipeliningTestParams::NewL(CHTTPTestUtils& aTestUtils)
+ {
+ CPipeliningTestParams* self = new (ELeave) CPipeliningTestParams(aTestUtils);
+ return self;
+ }
+
+CPipeliningTestParams::CPipeliningTestParams(CHTTPTestUtils& aTestUtils)
+:iTestUtils(aTestUtils)
+ {
+ //Only Initializing integers, for the strings we need to know the size.
+ iBufferSize = -1;
+ iConnectionCount = -1;
+ iTotalTransactionCount = -1;
+ }
+
+CPipeliningTestParams::~CPipeliningTestParams()
+ {
+ delete iTestCaseNameBuf;
+ delete iReqMethod;
+ TInt count;
+
+ count = iUriBufArr.Count();
+ for (TInt ii=0; ii < count ; ++ii )
+ {
+ delete iUriBufArr[ii];
+ }
+ iUriBufArr.Close();
+
+ count = iRawRequestBufArr.Count();
+ for (TInt ii=0; ii < count ; ++ii )
+ {
+ delete iRawRequestBufArr[ii];
+ }
+ iRawRequestBufArr.Close();
+
+ count = iRawResponseBufArr.Count();
+ for (TInt ii=0; ii < count; ++ii )
+ {
+ delete iRawResponseBufArr[ii];
+ }
+ iRawResponseBufArr.Close();
+
+
+ count = iConnReq2DArr.Count();
+ for (TInt ii=0; ii < count; ++ii )
+ {
+ iConnReq2DArr[ii].Close();
+ }
+ iConnReq2DArr.Close();
+
+ count = iConnResp2DArr.Count();
+ for (TInt ii=0; ii < count; ++ii )
+ {
+ iConnResp2DArr[ii].Close();
+ }
+ iConnResp2DArr.Close();
+
+ TInt temp = iTransTypesInfoPtrArr.Count();
+ for ( TInt ii=0; ii < temp; ++ii)
+ {
+ iTransTypesInfoPtrArr[ii]->TransHeaderTypeArr.Close();
+ iTransTypesInfoPtrArr[ii]->TransHeaderInfoPtrArr.ResetAndDestroy();
+ delete iTransTypesInfoPtrArr[ii];
+ }
+ iTransTypesInfoPtrArr.Close();
+
+ count = iHeader2ProcessArr.Count();
+
+ for (TInt ii=0; ii < count; ++ii )
+ {
+ delete iHeader2ProcessArr[ii];
+ }
+
+ count = iHdrVal2DArr.Count();
+ for (TInt ii=0; ii < count; ++ii )
+ {
+ TInt hdrValCount = iHdrVal2DArr[ii].Count();
+ for (TInt jj=0; jj < hdrValCount; ++jj)
+ {
+ delete iHdrVal2DArr[ii][jj];
+ }
+ iHdrVal2DArr[ii].Close();
+ }
+ iHdrVal2DArr.Close();
+ iHeader2ProcessArr.Close();
+ iTransArr.Close();
+ }
+
+
+//RunTest
+void CPipeliningTestParams::SetRunTest(const TDesC& aRunTest)
+ {
+ iRunTest = Ptr2Int(aRunTest);
+ }
+
+TBool CPipeliningTestParams::RunTest() const
+ {
+ return iRunTest;
+ }
+
+//Batching Enabled
+void CPipeliningTestParams::EnableBatching(const TDesC& aIsBatchingEnabled)
+ {
+ iBatchingEnabled = Ptr2Int(aIsBatchingEnabled);
+ }
+
+TBool CPipeliningTestParams::BatchingEnabled() const
+ {
+ return iBatchingEnabled;
+ }
+
+//Pipelining Enabled
+void CPipeliningTestParams::EnablePipelining(const TDesC& aIsPipeliningEnabled)
+ {
+ iPipeliningEnabled = Ptr2Int(aIsPipeliningEnabled);
+ }
+
+TBool CPipeliningTestParams::PipeliningEnabled() const
+ {
+ return iPipeliningEnabled;
+ }
+
+
+//Buffer Size
+void CPipeliningTestParams::SetBufferSize(const TDesC& aBufferSize)
+ {
+ iBufferSize = Ptr2Int(aBufferSize);
+ }
+
+TInt CPipeliningTestParams::BufferSize() const
+ {
+ return iBufferSize;
+ }
+
+
+
+//Error
+void CPipeliningTestParams::SetErrorL(const TDesC& aError)
+ {
+ HBufC* iErrorBuf = HBufC::NewLC(aError.Size());
+ (iErrorBuf->Des()).Copy(aError);
+ RemoveQuotes(iErrorBuf) ;
+ ParseReplaceCRLF(iErrorBuf) ;
+
+ if(iErrorBuf->Des().Compare(_L("KErrDisconnected")) == 0)
+ {
+ iError = KErrDisconnected;
+ }
+
+ else if (iErrorBuf->Des().Compare(_L("KErrCancel")) == 0)
+ {
+ iError = KErrCancel;
+ }
+ else
+ {
+ iError = KErrNone;
+ }
+
+ CleanupStack::PopAndDestroy(iErrorBuf);
+ }
+
+TInt CPipeliningTestParams::Error() const
+ {
+ return iError;
+ }
+
+//Connection Count
+void CPipeliningTestParams::SetConnectionCount(const TDesC& aConnectionCount)
+ {
+ iConnectionCount = Ptr2Int(aConnectionCount);
+ }
+
+TInt CPipeliningTestParams::ConnectionCount() const
+ {
+ return iConnectionCount;
+ }
+
+//Request Method
+void CPipeliningTestParams::SetReqMethodL(const TDesC& aReqMethod)
+ {
+ iReqMethod = HBufC::NewL(aReqMethod.Size());
+ (iReqMethod->Des()).Copy(aReqMethod);
+ RemoveQuotes(iReqMethod);
+ }
+
+TDesC16& CPipeliningTestParams::ReqMethod()
+ {
+ return (*(iReqMethod));
+ }
+
+//Transaction Count
+void CPipeliningTestParams::SetTotalTransactionCount(const TDesC& aTotalTransCount)
+ {
+ iTotalTransactionCount = Ptr2Int(aTotalTransCount);
+ }
+
+void CPipeliningTestParams::DecreaseTotalTransactionCount() const
+ {
+ --iTotalTransactionCount;
+ }
+
+TInt CPipeliningTestParams::TotalTransactionCount() const
+ {
+ return iTotalTransactionCount;
+ }
+
+//Transaction Count
+TInt CPipeliningTestParams::TransactionCount(TInt aConnIndex) const
+ {
+
+ TInt outerSize = iConnReq2DArr.Count();
+
+ for (TInt x=0; x < outerSize; ++x )
+ {
+ TInt innerSize = iConnReq2DArr[x].Count();
+ }
+
+ __ASSERT_ALWAYS( ((aConnIndex < iConnReq2DArr.Count()) && (aConnIndex >= 0)), User::Invariant());
+
+ return iConnReq2DArr[aConnIndex].Count();
+ }
+
+
+//Test Case Name
+void CPipeliningTestParams::SetTestCaseNameL(const TDesC& aTestCaseName )
+ {
+ iTestCaseNameBuf = HBufC::NewL(aTestCaseName.Size());
+ (iTestCaseNameBuf->Des()).Copy(aTestCaseName);
+ RemoveQuotes(iTestCaseNameBuf);
+ }
+
+TDesC& CPipeliningTestParams::TestCaseName() const
+ {
+ return (*(iTestCaseNameBuf));
+ }
+
+
+//Uri
+void CPipeliningTestParams::SetUriL(TInt aUriIndex, const TDesC& aUri)
+ {
+ if (aUriIndex == 0)
+ {
+ iUriBufArr.Reset();
+ }
+
+ TInt uriSize = aUri.Size();
+
+ HBufC8* tmpUri;
+ tmpUri = HBufC8::NewLC(((uriSize%2) == 0)? (uriSize/2):((uriSize/2)+1));
+ User::LeaveIfError(iUriBufArr.Append(tmpUri));
+ ((iUriBufArr[aUriIndex])->Des()).Copy(aUri);
+
+ RemoveQuotes(iUriBufArr[aUriIndex]);
+ CleanupStack::Pop(tmpUri);
+ }
+
+
+
+TInt CPipeliningTestParams::UriCount() const
+ {
+ return iUriBufArr.Count();
+ }
+
+
+
+
+TDesC8& CPipeliningTestParams::UriL(TInt aUriIndex) const
+ {
+ __ASSERT_ALWAYS( ((aUriIndex < iUriBufArr.Count()) && (aUriIndex >= 0)), User::Leave(KErrArgument));
+
+ return (*(iUriBufArr[aUriIndex]));
+ }
+
+
+
+
+//Raw Request
+//store the raw request strings
+void CPipeliningTestParams::SetRawRequestL(TInt aTransIndex, const TDesC& aRawRequest)
+ {
+ TInt rawRequestSize = aRawRequest.Size();
+ HBufC8* tmpRequest = HBufC8::NewLC(((rawRequestSize%2) == 0)? (rawRequestSize/2):((rawRequestSize/2)+1));
+ User::LeaveIfError(iRawRequestBufArr.Append(tmpRequest));
+ ((iRawRequestBufArr[aTransIndex])->Des()).Copy(aRawRequest);
+
+ RemoveQuotes(iRawRequestBufArr[aTransIndex]) ;
+ ParseReplaceCRLF(iRawRequestBufArr[aTransIndex]) ;
+ CleanupStack::Pop(tmpRequest);
+ }
+
+//return the raw request based on the request array (rawrequest[(iConnRequest2DArr[connIndex][transIndex])]
+TDesC8& CPipeliningTestParams::RawRequest(TInt aConnIndex, TInt aTransIndex) const
+ {
+ __ASSERT_ALWAYS( ((aConnIndex < iConnReq2DArr.Count()) && (aConnIndex >= 0)), User::Invariant());
+ __ASSERT_ALWAYS( ((aTransIndex < iConnReq2DArr[aConnIndex].Count()) && (aTransIndex >= 0)), User::Invariant());
+
+ TInt returnIndex = iConnReq2DArr[aConnIndex][aTransIndex];
+ return (*( iRawRequestBufArr[ returnIndex - 1 ] ) );
+ }
+
+TDesC8& CPipeliningTestParams::RawRequest( TInt aRawRequestBufArrIndex ) const
+ {
+ __ASSERT_ALWAYS( ((aRawRequestBufArrIndex < iRawRequestBufArr.Count()) && (aRawRequestBufArrIndex >= 0)), User::Invariant());
+
+ return (*(iRawRequestBufArr[aRawRequestBufArrIndex]));
+ }
+
+//Raw Response
+void CPipeliningTestParams::SetRawResponseL(TInt aTransIndex, const TDesC& aRawResponse)
+ {
+ TInt rawResponseSize = aRawResponse.Size();
+ HBufC8* tmpResponse = HBufC8::NewLC(((rawResponseSize%2) == 0)? (rawResponseSize/2):((rawResponseSize/2)+1));
+ User::LeaveIfError(iRawResponseBufArr.Append(tmpResponse));
+ ((iRawResponseBufArr[aTransIndex])->Des()).Copy(aRawResponse);
+
+ RemoveQuotes(iRawResponseBufArr[aTransIndex]) ;
+ ParseReplaceCRLF(iRawResponseBufArr[aTransIndex]) ;
+ CleanupStack::Pop(tmpResponse);
+ }
+
+
+
+
+
+TDesC8& CPipeliningTestParams::RawResponse(TInt aConnIndex, TInt aTransIndex) const
+ {
+ __ASSERT_ALWAYS( ((aConnIndex < iConnResp2DArr.Count()) && (aConnIndex >= 0)), User::Invariant());
+ __ASSERT_ALWAYS( ((aTransIndex < iConnResp2DArr[aConnIndex].Count()) && (aTransIndex >= 0)), User::Invariant());
+
+ TInt returnIndex = iConnResp2DArr[aConnIndex][aTransIndex];
+ return (*(iRawResponseBufArr[ returnIndex - 1 ]));
+ }
+
+
+
+
+
+TDesC8& CPipeliningTestParams::RawResponse( TInt aRawResponseBufArrIndex ) const
+ {
+ __ASSERT_ALWAYS( ((aRawResponseBufArrIndex < iRawResponseBufArr.Count()) && (aRawResponseBufArrIndex >= 0)), User::Invariant());
+
+ return (*(iRawResponseBufArr[aRawResponseBufArrIndex]));
+ }
+
+
+
+
+//Returns a TransInfo instance
+TransInfo& CPipeliningTestParams::TransactionType(TInt atransTypeNum) const
+ {
+ TInt transTypeIndex = -1;
+ for (TInt x=0; x < iTransTypesInfoPtrArr.Count(); ++x)
+ {
+ if (iTransTypesInfoPtrArr[x]->TransType == atransTypeNum)
+ {
+ transTypeIndex = x;
+ }
+ }
+ __ASSERT_ALWAYS((transTypeIndex >= 0),User::Invariant());
+ return (*(iTransTypesInfoPtrArr[transTypeIndex]));
+ }
+
+
+
+
+TInt CPipeliningTestParams::SetTransactionTypeL(TInt aTransTypeNumber, TDesC& aTransInfoDesc)
+ {
+ HBufC* transInfoBuf = HBufC::NewL(aTransInfoDesc.Size());
+ CleanupStack::PushL( transInfoBuf );
+ (transInfoBuf->Des()).Copy(aTransInfoDesc);
+
+ RemoveQuotes(transInfoBuf) ;
+ ParseReplaceCRLF(transInfoBuf) ;
+
+ //Create an instance of transInfo structure on heap
+ TransInfo* transInfo = new (ELeave) TransInfo;
+ iTransTypesInfoPtrArr.Append(transInfo);
+
+ //testing
+ transInfo->TransHeaderTypeArr.Insert( -1 , 0 );
+
+ //Set the transaction type number
+ transInfo->TransType = aTransTypeNumber;
+
+ //Parse the string transInfoBuf at comma's
+ //Get a bunch of substrings delimited by comma
+
+ CheckSetHeaderValueL(*transInfoBuf, _L("*HTTP*"), *transInfo, EHttpHeader);
+ CheckSetHeaderValueL(*transInfoBuf, _L("*Connection*"), *transInfo, EConnectionHeader);
+ CheckSetHeaderValueL(*transInfoBuf, _L("*Batching*"), *transInfo, EBatchingHeader);
+ CheckSetHeaderValueL(*transInfoBuf, _L("*Transaction*"), *transInfo, ETransactionHeader);
+
+ CleanupStack::PopAndDestroy( transInfoBuf );
+
+ return 0;
+ }
+
+
+
+
+
+TBool CPipeliningTestParams::ProcessHeader() const
+ {
+ return iProcessHdr;
+ }
+
+
+void CPipeliningTestParams::SetHeaderToProcessL(const TInt aHdrIdx, const TDesC& aHeaderName )
+ {
+ __ASSERT_ALWAYS((((aHdrIdx -1) >= 0) && ((aHdrIdx -1) == iHeader2ProcessArr.Count() )), User::Invariant());
+
+ TInt aHeaderNameSize = aHeaderName.Size();
+ HBufC8* tmpHdr = HBufC8::NewLC(((aHeaderNameSize%2) == 0)? (aHeaderNameSize/2):((aHeaderNameSize/2)+1));
+ User::LeaveIfError(iHeader2ProcessArr.Append(tmpHdr));
+ ((iHeader2ProcessArr[aHdrIdx-1])->Des()).Copy(aHeaderName);
+
+ RemoveQuotes(iHeader2ProcessArr[aHdrIdx - 1]) ;
+ ParseReplaceCRLF(iHeader2ProcessArr[aHdrIdx - 1]) ;
+
+ iProcessHdr = ETrue;
+ CleanupStack::Pop(tmpHdr);
+ }
+
+
+// Number of headers for this transaction
+TInt CPipeliningTestParams::NumHdrs() const
+ {
+ return iHeader2ProcessArr.Count();
+ }
+
+
+TDesC8& CPipeliningTestParams::HeaderToProcess(TInt aHdrIdx) const
+ {
+ __ASSERT_ALWAYS( (((aHdrIdx) < iHeader2ProcessArr.Count()) && ((aHdrIdx) >= 0)), User::Invariant());
+
+ return (*(iHeader2ProcessArr[aHdrIdx]));
+ }
+
+
+
+
+//Value expected for the header
+//1. Number of header values for this header
+TInt CPipeliningTestParams::NumberOfHeaderVals(const TInt aHdrIdx) const
+ {
+ __ASSERT_ALWAYS( ((aHdrIdx < iHeader2ProcessArr.Count()) && (aHdrIdx >= 0)), User::Invariant());
+
+ return iHdrVal2DArr[aHdrIdx].Count();
+ }
+
+TDesC8& CPipeliningTestParams::HeaderVal(const TInt aHdrCtr, const TInt aHdrValCtr ) const
+ {
+ __ASSERT_ALWAYS( ((aHdrCtr-1 < iHeader2ProcessArr.Count()) && (aHdrCtr-1 >= 0)), User::Invariant());
+ __ASSERT_ALWAYS( ((aHdrValCtr-1 < iHdrVal2DArr[aHdrCtr-1].Count()) && (aHdrValCtr-1 >= 0)), User::Invariant());
+
+ return (*(iHdrVal2DArr[aHdrCtr - 1][aHdrValCtr - 1]));
+
+ }
+
+void CPipeliningTestParams::SetHdrValL(const TInt aHdrIdx, const TInt aHdrValIdx, const TDesC& aHdrVal)
+ {
+ __ASSERT_ALWAYS( (((aHdrIdx-1) < iHeader2ProcessArr.Count()) && ((aHdrIdx-1) >= 0)), User::Invariant());
+
+
+ TInt aHdrValSize = aHdrVal.Size();
+ RArray < HBufC8 * > y ;
+
+
+ if ( iHdrVal2DArr.Count() <= (aHdrIdx-1) )
+ {
+ User::LeaveIfError(iHdrVal2DArr.Append(y));
+ }
+ else
+ {
+ y = iHdrVal2DArr[aHdrIdx-1];
+ }
+
+ HBufC8* tmpHdr = HBufC8::NewLC(((aHdrValSize%2) == 0)? (aHdrValSize/2):((aHdrValSize/2)+1));
+ User::LeaveIfError(y.Append(tmpHdr));
+ y[aHdrValIdx-1]->Des().Copy(aHdrVal);
+
+ iHdrVal2DArr.Remove ( aHdrIdx - 1 );
+ iHdrVal2DArr.Insert ( y, aHdrIdx - 1 );
+
+ HBufC8* xyz = y[aHdrValIdx-1];
+ HBufC8* xyz1 = iHdrVal2DArr[aHdrIdx-1][aHdrValIdx-1];
+
+ TPtr8 ptr = xyz->Des();
+ TPtr8 ptr1 = xyz1->Des();
+
+ RemoveQuotes(iHdrVal2DArr[aHdrIdx - 1][aHdrValIdx - 1]) ;
+ ParseReplaceCRLF(iHdrVal2DArr[aHdrIdx - 1][aHdrValIdx - 1]) ;
+
+ CleanupStack::Pop(tmpHdr);
+ }
+//Parse Replace to replace double quotes
+void CPipeliningTestParams::RemoveQuotes(HBufC16* aHBufPtr)
+ {
+ if (((*aHBufPtr)[0]) == KDoubleQuote)
+ {
+ (aHBufPtr->Des()).Delete(0,1);
+ }
+
+ TInt lastChar = ((aHBufPtr->Des()).Length());
+ --lastChar;
+
+ if ((*aHBufPtr)[lastChar] == KDoubleQuote)
+ {
+ (aHBufPtr->Des()).Delete(lastChar,1);
+ }
+
+ }
+
+
+
+
+void CPipeliningTestParams::RemoveQuotes(HBufC8* aHBufPtr)
+ {
+ if ((( *aHBufPtr )[0]) == KDoubleQuote)
+ {
+ ( aHBufPtr->Des() ).Delete(0,1);
+ }
+
+ TInt lastChar = ((aHBufPtr->Des()).Length());
+ --lastChar;
+
+ if (( *aHBufPtr )[lastChar] == KDoubleQuote)
+ {
+ ( aHBufPtr->Des() ).Delete(lastChar,1);
+ }
+
+ }
+
+
+
+
+//Parse Replace \n & \r
+void CPipeliningTestParams::ParseReplaceCRLF(HBufC8* aHBufPtr)
+ {
+ TInt crPos = 0;
+ TInt lfPos = 0;
+ do
+ {
+
+ crPos = ((aHBufPtr->Des()).Find(KScriptCR8()));
+ if (crPos != KErrNotFound)
+ {
+ (aHBufPtr->Des()).Replace(crPos,2, KReplaceCR8());
+ }
+
+ }
+ while (crPos != KErrNotFound );
+
+
+ do
+ {
+
+ lfPos = ((aHBufPtr->Des()).Find(KScriptLF8()));
+ if (lfPos != KErrNotFound)
+ {
+ (aHBufPtr->Des()).Replace(lfPos,2, KReplaceLF8());
+ }
+
+ }
+ while (lfPos != KErrNotFound );
+
+ }
+
+
+
+
+void CPipeliningTestParams::ParseReplaceCRLF(HBufC16* aHBufPtr)
+ {
+ TInt crPos = 0;
+ TInt lfPos = 0;
+ do
+ {
+
+ crPos = ((aHBufPtr->Des()).Find(KScriptCR()));
+ if (crPos != KErrNotFound)
+ {
+ (aHBufPtr->Des()).Replace(crPos,2, KReplaceCR());
+ }
+
+ }
+ while (crPos != KErrNotFound );
+
+
+ do
+ {
+
+ lfPos = ((aHBufPtr->Des()).Find(KScriptLF()));
+ if (lfPos != KErrNotFound)
+ {
+ (aHBufPtr->Des()).Replace(lfPos,2, KReplaceLF());
+ }
+
+ }
+ while (lfPos != KErrNotFound );
+
+ }
+
+
+
+
+
+
+//parse and set the request or Response array
+void CPipeliningTestParams::SetSequenceArrL(const TDesC& aRawRequestOrResponseArr, TInt aInt)
+ {
+ TInt jj;
+ TInt ii;
+ TInt arrMemberInt = -1;
+ RArray < TInt > aArray;
+ CleanupClosePushL(aArray);
+ ii = 0;
+ jj = 0;
+ if (aRawRequestOrResponseArr[jj] == ' ')
+ {
+ ++jj;
+ }
+
+ TInt arrSize = aRawRequestOrResponseArr.Length();
+ for ( ii=0; ii < arrSize ; ++ii )
+ {
+ if ( ( aRawRequestOrResponseArr[ii] == ',') ) //one integer, so process it
+ {
+ TPtrC intCharPtr = aRawRequestOrResponseArr.Mid ( jj, (ii - jj) );
+ TLex intLex2SlicePtr( intCharPtr );
+ arrMemberInt = -1;
+ intLex2SlicePtr.Val(arrMemberInt);
+
+ if ( aInt == ETransactionArray )
+ {
+ User::LeaveIfError(iTransArr.Append(arrMemberInt));
+ }
+ else
+ {
+ User::LeaveIfError(aArray.Append(arrMemberInt));
+ }
+
+ jj = ii + 1;
+ if ( aRawRequestOrResponseArr[jj] == ' ' )
+ {
+ ++jj;
+ }
+ }
+ }
+
+ TInt lastInt;
+ TPtrC lastCharPtr = aRawRequestOrResponseArr.Mid ( jj, (aRawRequestOrResponseArr.Length() - jj ) );
+ TLex lastIntLex2SlicePtr( lastCharPtr );
+ lastIntLex2SlicePtr.Val(lastInt);
+
+ if ( aInt == ETransactionArray )
+ {
+ User::LeaveIfError(iTransArr.Append( lastInt ));
+ }
+ else
+ {
+ User::LeaveIfError(aArray.Append( lastInt ));
+ }
+
+
+ if ( aInt == ERequestArray )
+ {
+ User::LeaveIfError(iConnReq2DArr.Append( aArray ));
+ }
+ else if ( aInt == EResponseArray )
+ {
+ User::LeaveIfError(iConnResp2DArr.Append( aArray ));
+ }
+ CleanupStack::Pop();
+ }
+
+
+
+
+
+//return the reqarr value
+TInt CPipeliningTestParams::TransactionSequenceArray(TInt aIndex) const
+ {
+ __ASSERT_ALWAYS( ((aIndex < iTransArr.Count()) && (aIndex >= 0)), User::Invariant());
+
+ return iTransArr[aIndex];
+ }
+
+
+
+//Need to write this up
+void CPipeliningTestParams::ValidateL() const
+ {
+ TInt err = KErrNone;
+ TBool localUri = EFalse;
+
+ // Are all mandatory fields present?
+ // TestCaseName
+ __ASSERT_ALWAYS((iTestCaseNameBuf->Des().Length() > 0), User::Leave(KErrGeneral));
+
+ // Uri/Uri(n)
+ __ASSERT_ALWAYS(iUriBufArr.Count() > 0, User::Leave(KErrGeneral));
+
+ localUri = ((iUriBufArr.Count() == 1) && (((iUriBufArr[0]->Des()).Compare(_L8("http://127.0.0.1")) == 0) || ((iUriBufArr[0]->Des()).Compare(_L8("http://127.0.0.1/")) == 0)));
+
+ // Pipelining or Batching
+ __ASSERT_ALWAYS((iPipeliningEnabled) || (iBatchingEnabled), User::Leave(KErrGeneral));
+
+ // TotalTransactionCount
+ __ASSERT_ALWAYS(iTotalTransactionCount > 0, User::Leave(KErrGeneral));
+
+ // TransArr
+ __ASSERT_ALWAYS(iTransArr.Count() == (iTotalTransactionCount), User::Leave(KErrGeneral));
+
+ // ConnectionCount
+ __ASSERT_ALWAYS(((!(localUri) && (iConnectionCount == 0)) || (iConnectionCount > 0)), User::Leave(KErrGeneral));
+
+ // RawRequest
+ // Greater than 0
+ __ASSERT_ALWAYS(iRawRequestBufArr.Count() > 0, User::Leave(KErrGeneral));
+
+ // RawResponse
+ // Need not be there if connecting to external uri
+ // Single external uri
+ __ASSERT_ALWAYS((localUri) || (iRawResponseBufArr.Count() > 0), User::Leave(KErrGeneral));
+/*
+ if (localUri && iConnectionCount > 0 && !(iTestCaseNameBuf->Des().Compare(_L("Defect Fix INC036954")) == 0))
+ {
+ __ASSERT_ALWAYS(iConnReq2DArr.Count() == iConnectionCount, User::Leave(KErrGeneral));
+ }
+ // Are all optional fields correctly present?
+*/
+ User::LeaveIfError( err );
+ }