applayerprotocols/httptransportfw/Test/TestScriptTest/CPipeliningTestParams.cpp
changeset 0 b16258d2340f
equal deleted inserted replaced
-1:000000000000 0:b16258d2340f
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include "CPipeliningTestParams.h"
       
    17 #include "httptestutils.h"
       
    18 #include "CPipeliningTestCase.h"
       
    19 
       
    20 
       
    21 const TUint KDoubleQuote ('"');
       
    22 _LIT(KScriptLF, 	"\\n");
       
    23 _LIT(KReplaceLF,	"\n");
       
    24 _LIT8(KScriptLF8, 	"\\n");
       
    25 _LIT8(KReplaceLF8,	"\n");
       
    26 
       
    27 _LIT(KScriptCR, 	"\\r");
       
    28 _LIT(KReplaceCR,	"\r");
       
    29 _LIT8(KScriptCR8, 	"\\r");
       
    30 _LIT8(KReplaceCR8,	"\r");
       
    31 
       
    32 
       
    33 
       
    34 
       
    35 TInt err(0);
       
    36 //Helper function to convert TPtr to TInt
       
    37 static TInt Ptr2Int(const TDesC& aPtr)
       
    38 	{
       
    39 	TInt aInt;
       
    40 	TLex aLex(aPtr);
       
    41 	aLex.Val(aInt);
       
    42 	return aInt;
       
    43 	}
       
    44 
       
    45 void CheckSetHeaderValueL(const TDesC& aTransInfoBuf, const TDesC& aHeader2Check, TransInfo& aTransInfo, const TInt aLocationInHeaderArr)
       
    46 	{
       
    47 	TChar commaChar (',');
       
    48 	TChar colonChar (':');
       
    49 	TInt locationOfDes = aTransInfoBuf.Match(aHeader2Check);
       
    50 	
       
    51 	if (locationOfDes != KErrNotFound)//the header has been found in the input string
       
    52 		{
       
    53 	 	TPtrC subString = aTransInfoBuf.Mid(locationOfDes);
       
    54 	  	TInt commaDelimterPos = subString.Locate(commaChar);
       
    55 	  	TPtrC headerFieldValuePairString = subString.Mid(locationOfDes, (commaDelimterPos != KErrNotFound ? commaDelimterPos:subString.Length()));		
       
    56 	 	TInt colonDelimterPos = headerFieldValuePairString.Locate(colonChar);
       
    57 	 	TPtrC headerVal = headerFieldValuePairString.Mid(colonDelimterPos+1 );
       
    58 	 	HBufC *headerValueBuf = HBufC::NewLC(headerVal.Size());
       
    59 	 	(headerValueBuf->Des()).Copy(headerVal);
       
    60 	 	User::LeaveIfError(aTransInfo.TransHeaderInfoPtrArr.Append(headerValueBuf));
       
    61 	 	User::LeaveIfError(aTransInfo.TransHeaderTypeArr.Insert(((aTransInfo.TransHeaderInfoPtrArr.Count()) - 1),aLocationInHeaderArr));
       
    62 	 	CleanupStack::Pop(headerValueBuf);
       
    63 	 	}
       
    64 	 else//header is not present in the string
       
    65 	 	{
       
    66 	 	aTransInfo.TransHeaderTypeArr.Insert( ( -1 ), aLocationInHeaderArr );
       
    67 	 	}
       
    68 	}
       
    69 	
       
    70 
       
    71 CPipeliningTestParams* CPipeliningTestParams::NewL(CHTTPTestUtils& aTestUtils)
       
    72 	{
       
    73 	CPipeliningTestParams* self = new (ELeave) CPipeliningTestParams(aTestUtils);
       
    74 	return self;
       
    75 	}
       
    76 
       
    77 CPipeliningTestParams::CPipeliningTestParams(CHTTPTestUtils& aTestUtils)
       
    78 :iTestUtils(aTestUtils)
       
    79 	{
       
    80 	//Only Initializing integers, for the strings we need to know the size.
       
    81 	iBufferSize = -1;
       
    82 	iConnectionCount = -1;
       
    83 	iTotalTransactionCount = -1;
       
    84 	}
       
    85 
       
    86 CPipeliningTestParams::~CPipeliningTestParams()
       
    87 	{
       
    88 	delete iTestCaseNameBuf;
       
    89 	delete iReqMethod;
       
    90 	TInt count;
       
    91 	
       
    92 	count = iUriBufArr.Count();
       
    93 	for (TInt ii=0; ii < count ; ++ii )
       
    94 		{
       
    95 		delete iUriBufArr[ii];
       
    96 		}	
       
    97 	iUriBufArr.Close();
       
    98 	
       
    99 	count = iRawRequestBufArr.Count();
       
   100 	for (TInt ii=0; ii < count ; ++ii )
       
   101 		{
       
   102 		delete iRawRequestBufArr[ii];
       
   103 		}
       
   104 	iRawRequestBufArr.Close();
       
   105 	
       
   106 	count = iRawResponseBufArr.Count();
       
   107 	for (TInt ii=0; ii < count; ++ii )
       
   108 		{
       
   109 		delete iRawResponseBufArr[ii];	
       
   110 		}
       
   111 	iRawResponseBufArr.Close();
       
   112 	
       
   113 	
       
   114 	count = iConnReq2DArr.Count();
       
   115 	for (TInt ii=0; ii < count; ++ii )
       
   116 		{
       
   117 		iConnReq2DArr[ii].Close();
       
   118 		}
       
   119 	iConnReq2DArr.Close();
       
   120 	
       
   121 	count = iConnResp2DArr.Count();
       
   122 	for (TInt ii=0; ii < count; ++ii )
       
   123 		{
       
   124 		iConnResp2DArr[ii].Close();	
       
   125 		}
       
   126 	iConnResp2DArr.Close();
       
   127 	
       
   128 	TInt temp = iTransTypesInfoPtrArr.Count();
       
   129 	for ( TInt ii=0; ii < temp; ++ii)
       
   130 		{
       
   131 		iTransTypesInfoPtrArr[ii]->TransHeaderTypeArr.Close();
       
   132 		iTransTypesInfoPtrArr[ii]->TransHeaderInfoPtrArr.ResetAndDestroy();
       
   133 		delete iTransTypesInfoPtrArr[ii];
       
   134 		}
       
   135 	iTransTypesInfoPtrArr.Close();
       
   136 	
       
   137 	count = iHeader2ProcessArr.Count();
       
   138 
       
   139 	for (TInt ii=0; ii < count; ++ii )
       
   140 		{
       
   141 		delete iHeader2ProcessArr[ii];
       
   142 		}
       
   143 	
       
   144 	count = iHdrVal2DArr.Count();
       
   145 	for (TInt ii=0; ii < count; ++ii )
       
   146 		{
       
   147 		TInt hdrValCount = iHdrVal2DArr[ii].Count();
       
   148 		for (TInt jj=0; jj < hdrValCount; ++jj)
       
   149 			{
       
   150 			delete iHdrVal2DArr[ii][jj];
       
   151 			}
       
   152 		iHdrVal2DArr[ii].Close();
       
   153 		}			
       
   154 	iHdrVal2DArr.Close();
       
   155 	iHeader2ProcessArr.Close();
       
   156 	iTransArr.Close();
       
   157 	}
       
   158 
       
   159 
       
   160 //RunTest
       
   161 void CPipeliningTestParams::SetRunTest(const TDesC& aRunTest)
       
   162 	{
       
   163 	iRunTest = Ptr2Int(aRunTest);
       
   164 	}
       
   165 
       
   166 TBool	CPipeliningTestParams::RunTest() const
       
   167 	{
       
   168 	return iRunTest;
       
   169 	}
       
   170 
       
   171 //Batching Enabled
       
   172 void CPipeliningTestParams::EnableBatching(const TDesC& aIsBatchingEnabled)
       
   173 	{
       
   174 	iBatchingEnabled = Ptr2Int(aIsBatchingEnabled);
       
   175 	}
       
   176 
       
   177 TBool CPipeliningTestParams::BatchingEnabled() const
       
   178 	{
       
   179 	return iBatchingEnabled;
       
   180 	}
       
   181 
       
   182 //Pipelining Enabled
       
   183 void CPipeliningTestParams::EnablePipelining(const TDesC& aIsPipeliningEnabled)
       
   184 	{
       
   185 	iPipeliningEnabled = Ptr2Int(aIsPipeliningEnabled);	
       
   186 	}
       
   187 	
       
   188 TBool	CPipeliningTestParams::PipeliningEnabled() const
       
   189 	{
       
   190 	return iPipeliningEnabled;
       
   191 	}
       
   192 	
       
   193 
       
   194 //Buffer Size
       
   195 void CPipeliningTestParams::SetBufferSize(const TDesC& aBufferSize)
       
   196 	{
       
   197 	iBufferSize = Ptr2Int(aBufferSize);
       
   198 	}
       
   199 
       
   200 TInt	CPipeliningTestParams::BufferSize() const
       
   201 	{
       
   202 	return iBufferSize;
       
   203 	}
       
   204 
       
   205 
       
   206 
       
   207 //Error	
       
   208 void CPipeliningTestParams::SetErrorL(const TDesC& aError)
       
   209 	{
       
   210 	HBufC* iErrorBuf = HBufC::NewLC(aError.Size());
       
   211 	(iErrorBuf->Des()).Copy(aError);
       
   212 	RemoveQuotes(iErrorBuf)	;
       
   213 	ParseReplaceCRLF(iErrorBuf) ;
       
   214 	
       
   215 	if(iErrorBuf->Des().Compare(_L("KErrDisconnected")) == 0)
       
   216 		{
       
   217 		iError = KErrDisconnected;
       
   218 		}
       
   219 		
       
   220 	else if (iErrorBuf->Des().Compare(_L("KErrCancel")) == 0)
       
   221 		{
       
   222 		iError = KErrCancel;
       
   223 		}
       
   224 	else
       
   225 		{
       
   226 		iError = KErrNone;				
       
   227 		}	
       
   228 	
       
   229 	CleanupStack::PopAndDestroy(iErrorBuf);
       
   230 	}
       
   231 
       
   232 TInt CPipeliningTestParams::Error() const
       
   233 	{
       
   234 	return iError;
       
   235 	}
       
   236 
       
   237 //Connection Count	
       
   238 void CPipeliningTestParams::SetConnectionCount(const TDesC& aConnectionCount)
       
   239 	{
       
   240 	iConnectionCount = Ptr2Int(aConnectionCount);
       
   241 	}
       
   242 
       
   243 TInt CPipeliningTestParams::ConnectionCount() const
       
   244 	{
       
   245 	return iConnectionCount;
       
   246 	}
       
   247 	
       
   248 //Request Method
       
   249 void CPipeliningTestParams::SetReqMethodL(const TDesC& aReqMethod)	
       
   250 	{
       
   251 	iReqMethod = HBufC::NewL(aReqMethod.Size());
       
   252 	(iReqMethod->Des()).Copy(aReqMethod);
       
   253 	RemoveQuotes(iReqMethod);
       
   254 	}
       
   255 
       
   256 TDesC16& CPipeliningTestParams::ReqMethod()
       
   257 	{
       
   258 	return (*(iReqMethod));
       
   259 	}
       
   260 
       
   261 //Transaction Count
       
   262 void CPipeliningTestParams::SetTotalTransactionCount(const TDesC& aTotalTransCount)
       
   263 	{
       
   264 	iTotalTransactionCount = Ptr2Int(aTotalTransCount);
       
   265 	}
       
   266 
       
   267 void CPipeliningTestParams::DecreaseTotalTransactionCount() const
       
   268 	{
       
   269 		--iTotalTransactionCount;
       
   270 	}
       
   271 
       
   272 TInt CPipeliningTestParams::TotalTransactionCount() const
       
   273 	{
       
   274 	return iTotalTransactionCount;
       
   275 	}
       
   276 
       
   277 //Transaction Count
       
   278 TInt CPipeliningTestParams::TransactionCount(TInt aConnIndex) const
       
   279 	{
       
   280 	
       
   281 	TInt outerSize = iConnReq2DArr.Count();
       
   282 	
       
   283 	for (TInt x=0; x < outerSize; ++x )
       
   284 	{
       
   285 	TInt innerSize = iConnReq2DArr[x].Count();
       
   286 	}
       
   287 	
       
   288 	__ASSERT_ALWAYS( ((aConnIndex < iConnReq2DArr.Count()) && (aConnIndex >= 0)), User::Invariant());
       
   289 	
       
   290 	return iConnReq2DArr[aConnIndex].Count();
       
   291 	}
       
   292 	
       
   293 
       
   294 //Test Case Name
       
   295 void CPipeliningTestParams::SetTestCaseNameL(const TDesC& aTestCaseName ) 
       
   296 	{
       
   297 	iTestCaseNameBuf = HBufC::NewL(aTestCaseName.Size());
       
   298 	(iTestCaseNameBuf->Des()).Copy(aTestCaseName);
       
   299 	RemoveQuotes(iTestCaseNameBuf);
       
   300 	}
       
   301 
       
   302 TDesC& CPipeliningTestParams::TestCaseName() const
       
   303 	{
       
   304 	return (*(iTestCaseNameBuf));
       
   305 	}
       
   306 
       
   307 
       
   308 //Uri
       
   309 void CPipeliningTestParams::SetUriL(TInt aUriIndex, const TDesC& aUri)
       
   310 	{
       
   311 	if (aUriIndex == 0)
       
   312 		{
       
   313 		iUriBufArr.Reset();
       
   314 		}
       
   315 
       
   316 	TInt uriSize = aUri.Size();
       
   317 
       
   318 	HBufC8* tmpUri;
       
   319 	tmpUri = HBufC8::NewLC(((uriSize%2) == 0)? (uriSize/2):((uriSize/2)+1));
       
   320 	User::LeaveIfError(iUriBufArr.Append(tmpUri));
       
   321 	((iUriBufArr[aUriIndex])->Des()).Copy(aUri);
       
   322 
       
   323 	RemoveQuotes(iUriBufArr[aUriIndex]);
       
   324 	CleanupStack::Pop(tmpUri);
       
   325 	}
       
   326 
       
   327 
       
   328 
       
   329 TInt CPipeliningTestParams::UriCount() const
       
   330 	{
       
   331 	return iUriBufArr.Count();
       
   332 	}
       
   333 
       
   334 
       
   335 
       
   336 
       
   337 TDesC8&	CPipeliningTestParams::UriL(TInt aUriIndex) const
       
   338 	{
       
   339 	__ASSERT_ALWAYS( ((aUriIndex < iUriBufArr.Count()) && (aUriIndex >= 0)), User::Leave(KErrArgument));
       
   340 	
       
   341 	return (*(iUriBufArr[aUriIndex]));
       
   342 	}
       
   343 
       
   344 
       
   345 
       
   346 
       
   347 //Raw Request
       
   348 //store the raw request strings
       
   349 void CPipeliningTestParams::SetRawRequestL(TInt aTransIndex, const TDesC& aRawRequest)
       
   350 	{
       
   351 	TInt rawRequestSize = aRawRequest.Size();
       
   352 	HBufC8* tmpRequest = HBufC8::NewLC(((rawRequestSize%2) == 0)? (rawRequestSize/2):((rawRequestSize/2)+1));
       
   353 	User::LeaveIfError(iRawRequestBufArr.Append(tmpRequest));
       
   354 	((iRawRequestBufArr[aTransIndex])->Des()).Copy(aRawRequest);
       
   355 
       
   356 	RemoveQuotes(iRawRequestBufArr[aTransIndex])	;
       
   357 	ParseReplaceCRLF(iRawRequestBufArr[aTransIndex]) ;
       
   358 	CleanupStack::Pop(tmpRequest);
       
   359 	}
       
   360 	
       
   361 //return the raw request based on the request array (rawrequest[(iConnRequest2DArr[connIndex][transIndex])]
       
   362 TDesC8&	CPipeliningTestParams::RawRequest(TInt aConnIndex, TInt aTransIndex) const
       
   363 	{
       
   364 	__ASSERT_ALWAYS( ((aConnIndex < iConnReq2DArr.Count()) && (aConnIndex >= 0)), User::Invariant());
       
   365 	__ASSERT_ALWAYS( ((aTransIndex < iConnReq2DArr[aConnIndex].Count()) && (aTransIndex >= 0)), User::Invariant());
       
   366 
       
   367 	TInt returnIndex = iConnReq2DArr[aConnIndex][aTransIndex];
       
   368 	return (*( iRawRequestBufArr[ returnIndex - 1 ] ) );
       
   369 	}
       
   370 
       
   371 TDesC8&	CPipeliningTestParams::RawRequest( TInt aRawRequestBufArrIndex ) const
       
   372 	{
       
   373 	__ASSERT_ALWAYS( ((aRawRequestBufArrIndex < iRawRequestBufArr.Count()) && (aRawRequestBufArrIndex >= 0)), User::Invariant());
       
   374 
       
   375 	return (*(iRawRequestBufArr[aRawRequestBufArrIndex]));
       
   376 	}
       
   377 	
       
   378 //Raw Response
       
   379 void CPipeliningTestParams::SetRawResponseL(TInt aTransIndex, const TDesC& aRawResponse)
       
   380 	{
       
   381 	TInt rawResponseSize = aRawResponse.Size();
       
   382 	HBufC8* tmpResponse = HBufC8::NewLC(((rawResponseSize%2) == 0)? (rawResponseSize/2):((rawResponseSize/2)+1));
       
   383 	User::LeaveIfError(iRawResponseBufArr.Append(tmpResponse));
       
   384 	((iRawResponseBufArr[aTransIndex])->Des()).Copy(aRawResponse);
       
   385 
       
   386 	RemoveQuotes(iRawResponseBufArr[aTransIndex])	;
       
   387 	ParseReplaceCRLF(iRawResponseBufArr[aTransIndex]) ;
       
   388 	CleanupStack::Pop(tmpResponse);
       
   389 	}
       
   390 
       
   391 
       
   392 
       
   393 
       
   394 
       
   395 TDesC8&	CPipeliningTestParams::RawResponse(TInt aConnIndex, TInt aTransIndex) const
       
   396 	{
       
   397 	__ASSERT_ALWAYS( ((aConnIndex < iConnResp2DArr.Count()) && (aConnIndex >= 0)), User::Invariant());
       
   398 	__ASSERT_ALWAYS( ((aTransIndex < iConnResp2DArr[aConnIndex].Count()) && (aTransIndex >= 0)), User::Invariant());
       
   399 		
       
   400 	TInt returnIndex = iConnResp2DArr[aConnIndex][aTransIndex];
       
   401 	return (*(iRawResponseBufArr[ returnIndex - 1 ]));
       
   402 	}
       
   403 
       
   404 
       
   405 
       
   406 
       
   407 
       
   408 TDesC8&	CPipeliningTestParams::RawResponse( TInt aRawResponseBufArrIndex ) const
       
   409 	{
       
   410 	__ASSERT_ALWAYS( ((aRawResponseBufArrIndex < iRawResponseBufArr.Count()) && (aRawResponseBufArrIndex >= 0)), User::Invariant());
       
   411 	
       
   412 	return (*(iRawResponseBufArr[aRawResponseBufArrIndex]));
       
   413 	}
       
   414 
       
   415 
       
   416 
       
   417 
       
   418 //Returns a TransInfo instance
       
   419 TransInfo& CPipeliningTestParams::TransactionType(TInt atransTypeNum) const
       
   420 	{
       
   421 	TInt transTypeIndex = -1;
       
   422 	for (TInt x=0; x < iTransTypesInfoPtrArr.Count(); ++x)
       
   423 		{
       
   424 		if (iTransTypesInfoPtrArr[x]->TransType == atransTypeNum)
       
   425 			{
       
   426 			transTypeIndex = x;
       
   427 			}
       
   428 		}
       
   429 	__ASSERT_ALWAYS((transTypeIndex >= 0),User::Invariant());
       
   430 	return (*(iTransTypesInfoPtrArr[transTypeIndex]));
       
   431 	}
       
   432 
       
   433 
       
   434 
       
   435 
       
   436 TInt CPipeliningTestParams::SetTransactionTypeL(TInt aTransTypeNumber, TDesC& aTransInfoDesc)
       
   437 	{
       
   438 	HBufC* transInfoBuf = HBufC::NewL(aTransInfoDesc.Size());
       
   439 	CleanupStack::PushL( transInfoBuf );
       
   440 	(transInfoBuf->Des()).Copy(aTransInfoDesc);
       
   441 
       
   442 	RemoveQuotes(transInfoBuf)	;
       
   443 	ParseReplaceCRLF(transInfoBuf) ;
       
   444 
       
   445 	//Create an instance of transInfo structure on heap
       
   446 	TransInfo* transInfo = new (ELeave) TransInfo;
       
   447 	iTransTypesInfoPtrArr.Append(transInfo);
       
   448 	
       
   449 	//testing
       
   450 	transInfo->TransHeaderTypeArr.Insert( -1 , 0 );
       
   451 	
       
   452 	//Set the transaction type number
       
   453 	transInfo->TransType = aTransTypeNumber;
       
   454 	
       
   455 	//Parse the string transInfoBuf at comma's
       
   456 	//Get a bunch of substrings delimited by comma	
       
   457 
       
   458 	CheckSetHeaderValueL(*transInfoBuf, _L("*HTTP*"), *transInfo, EHttpHeader);
       
   459 	CheckSetHeaderValueL(*transInfoBuf, _L("*Connection*"), *transInfo, EConnectionHeader);
       
   460 	CheckSetHeaderValueL(*transInfoBuf, _L("*Batching*"), *transInfo, EBatchingHeader);
       
   461 	CheckSetHeaderValueL(*transInfoBuf, _L("*Transaction*"), *transInfo, ETransactionHeader);
       
   462 	
       
   463 	CleanupStack::PopAndDestroy( transInfoBuf );
       
   464 	
       
   465 	return 0;												
       
   466 	}
       
   467 
       
   468 
       
   469 
       
   470 
       
   471 
       
   472 TBool CPipeliningTestParams::ProcessHeader() const
       
   473 	{
       
   474 	return iProcessHdr;
       
   475 	}
       
   476 
       
   477 
       
   478 void CPipeliningTestParams::SetHeaderToProcessL(const TInt aHdrIdx, const TDesC& aHeaderName ) 
       
   479 	{	
       
   480 	__ASSERT_ALWAYS((((aHdrIdx -1) >= 0) && ((aHdrIdx -1) == iHeader2ProcessArr.Count()  )), User::Invariant());
       
   481 	
       
   482 	TInt aHeaderNameSize = aHeaderName.Size();
       
   483 	HBufC8* tmpHdr = HBufC8::NewLC(((aHeaderNameSize%2) == 0)? (aHeaderNameSize/2):((aHeaderNameSize/2)+1));
       
   484 	User::LeaveIfError(iHeader2ProcessArr.Append(tmpHdr));
       
   485 	((iHeader2ProcessArr[aHdrIdx-1])->Des()).Copy(aHeaderName);
       
   486 
       
   487 	RemoveQuotes(iHeader2ProcessArr[aHdrIdx - 1])	;
       
   488 	ParseReplaceCRLF(iHeader2ProcessArr[aHdrIdx - 1]) ;
       
   489 	
       
   490 	iProcessHdr = ETrue;
       
   491 	CleanupStack::Pop(tmpHdr);
       
   492 	}
       
   493 
       
   494 
       
   495 // Number of headers for this transaction
       
   496 TInt CPipeliningTestParams::NumHdrs() const
       
   497 	{
       
   498 	return iHeader2ProcessArr.Count();
       
   499 	}
       
   500 
       
   501 
       
   502 TDesC8& CPipeliningTestParams::HeaderToProcess(TInt aHdrIdx) const
       
   503 	{
       
   504 	__ASSERT_ALWAYS( (((aHdrIdx) < iHeader2ProcessArr.Count()) && ((aHdrIdx) >= 0)), User::Invariant());
       
   505 	
       
   506 	return (*(iHeader2ProcessArr[aHdrIdx]));
       
   507 	}
       
   508 
       
   509 
       
   510 
       
   511 
       
   512 //Value expected for the header
       
   513 //1. Number of header values for this header
       
   514 TInt CPipeliningTestParams::NumberOfHeaderVals(const TInt aHdrIdx) const
       
   515 	{
       
   516 	__ASSERT_ALWAYS( ((aHdrIdx < iHeader2ProcessArr.Count()) && (aHdrIdx >= 0)), User::Invariant());
       
   517 	
       
   518 	return iHdrVal2DArr[aHdrIdx].Count();
       
   519 	}
       
   520 
       
   521 TDesC8& CPipeliningTestParams::HeaderVal(const TInt aHdrCtr, const TInt aHdrValCtr ) const
       
   522 	{
       
   523 	__ASSERT_ALWAYS( ((aHdrCtr-1 < iHeader2ProcessArr.Count()) && (aHdrCtr-1 >= 0)), User::Invariant());		
       
   524 	__ASSERT_ALWAYS( ((aHdrValCtr-1 < iHdrVal2DArr[aHdrCtr-1].Count()) && (aHdrValCtr-1 >= 0)), User::Invariant());
       
   525 	
       
   526 	return (*(iHdrVal2DArr[aHdrCtr - 1][aHdrValCtr - 1]));
       
   527 	
       
   528 	}
       
   529 
       
   530 void CPipeliningTestParams::SetHdrValL(const TInt aHdrIdx, const TInt aHdrValIdx, const TDesC& aHdrVal)
       
   531 	{
       
   532 	__ASSERT_ALWAYS( (((aHdrIdx-1) < iHeader2ProcessArr.Count()) && ((aHdrIdx-1) >= 0)), User::Invariant());		
       
   533 
       
   534 
       
   535 	TInt aHdrValSize = aHdrVal.Size();
       
   536 	RArray < HBufC8 * > y ;
       
   537 
       
   538 	
       
   539 	if ( iHdrVal2DArr.Count() <= (aHdrIdx-1) )
       
   540 		{
       
   541 		User::LeaveIfError(iHdrVal2DArr.Append(y));
       
   542 		}
       
   543 	else
       
   544 		{
       
   545 		y = iHdrVal2DArr[aHdrIdx-1];
       
   546 		}
       
   547 		
       
   548 	HBufC8* tmpHdr = HBufC8::NewLC(((aHdrValSize%2) == 0)? (aHdrValSize/2):((aHdrValSize/2)+1));
       
   549 	User::LeaveIfError(y.Append(tmpHdr));
       
   550 	y[aHdrValIdx-1]->Des().Copy(aHdrVal);		
       
   551 	
       
   552 	iHdrVal2DArr.Remove ( aHdrIdx - 1 );
       
   553 	iHdrVal2DArr.Insert ( y, aHdrIdx - 1 );
       
   554 
       
   555 	HBufC8* xyz = y[aHdrValIdx-1];
       
   556 	HBufC8* xyz1 = iHdrVal2DArr[aHdrIdx-1][aHdrValIdx-1];
       
   557 	
       
   558 	TPtr8 ptr = xyz->Des();
       
   559 	TPtr8 ptr1 = xyz1->Des();
       
   560 
       
   561 	RemoveQuotes(iHdrVal2DArr[aHdrIdx - 1][aHdrValIdx - 1])	;
       
   562 	ParseReplaceCRLF(iHdrVal2DArr[aHdrIdx - 1][aHdrValIdx - 1]) ;
       
   563 	
       
   564 	CleanupStack::Pop(tmpHdr);
       
   565 	}
       
   566 //Parse Replace to replace double quotes
       
   567 void CPipeliningTestParams::RemoveQuotes(HBufC16* aHBufPtr) 
       
   568 	{
       
   569 	if (((*aHBufPtr)[0]) == KDoubleQuote)
       
   570 		{
       
   571 		(aHBufPtr->Des()).Delete(0,1);
       
   572 		}
       
   573 		
       
   574 	TInt lastChar = ((aHBufPtr->Des()).Length());
       
   575 	--lastChar;
       
   576 	
       
   577 	if ((*aHBufPtr)[lastChar] == KDoubleQuote)
       
   578 		{
       
   579 		(aHBufPtr->Des()).Delete(lastChar,1);
       
   580 		}
       
   581 		
       
   582 	}
       
   583 
       
   584 
       
   585 
       
   586 
       
   587 void CPipeliningTestParams::RemoveQuotes(HBufC8* aHBufPtr) 
       
   588 	{
       
   589 	if ((( *aHBufPtr )[0]) == KDoubleQuote)
       
   590 		{
       
   591 		( aHBufPtr->Des() ).Delete(0,1);
       
   592 		}	
       
   593 		
       
   594 	TInt lastChar = ((aHBufPtr->Des()).Length());
       
   595 	--lastChar;
       
   596 	
       
   597 	if (( *aHBufPtr )[lastChar] == KDoubleQuote)
       
   598 		{
       
   599 		( aHBufPtr->Des() ).Delete(lastChar,1);
       
   600 		}
       
   601 		
       
   602 	}
       
   603 
       
   604 
       
   605 
       
   606 
       
   607 //Parse Replace \n & \r
       
   608 void CPipeliningTestParams::ParseReplaceCRLF(HBufC8* aHBufPtr)
       
   609 	{
       
   610 	TInt crPos = 0;
       
   611 	TInt lfPos = 0;
       
   612 	do
       
   613 		{
       
   614 
       
   615 		crPos = ((aHBufPtr->Des()).Find(KScriptCR8()));
       
   616 		if (crPos != KErrNotFound)
       
   617 			{
       
   618 			(aHBufPtr->Des()).Replace(crPos,2, KReplaceCR8());
       
   619 			}
       
   620 			
       
   621 		}
       
   622 	while (crPos != KErrNotFound );
       
   623 
       
   624 
       
   625 	do
       
   626 		{
       
   627 
       
   628 		lfPos = ((aHBufPtr->Des()).Find(KScriptLF8()));
       
   629 		if (lfPos != KErrNotFound)
       
   630 			{
       
   631 			(aHBufPtr->Des()).Replace(lfPos,2, KReplaceLF8());
       
   632 			}
       
   633 			
       
   634 		}
       
   635 	while (lfPos != KErrNotFound );
       
   636 	
       
   637 	}
       
   638 
       
   639 
       
   640 
       
   641 
       
   642 void CPipeliningTestParams::ParseReplaceCRLF(HBufC16* aHBufPtr)
       
   643 	{
       
   644 	TInt crPos = 0;
       
   645 	TInt lfPos = 0;
       
   646 	do
       
   647 		{
       
   648 
       
   649 		crPos = ((aHBufPtr->Des()).Find(KScriptCR()));
       
   650 		if (crPos != KErrNotFound)
       
   651 			{
       
   652 			(aHBufPtr->Des()).Replace(crPos,2, KReplaceCR());
       
   653 			}
       
   654 			
       
   655 		}
       
   656 	while (crPos != KErrNotFound );
       
   657 
       
   658 
       
   659 	do
       
   660 		{
       
   661 
       
   662 		lfPos = ((aHBufPtr->Des()).Find(KScriptLF()));
       
   663 		if (lfPos != KErrNotFound)
       
   664 			{
       
   665 			(aHBufPtr->Des()).Replace(lfPos,2, KReplaceLF());
       
   666 			}
       
   667 			
       
   668 		}
       
   669 	while (lfPos != KErrNotFound );
       
   670 	
       
   671 	}
       
   672 	
       
   673 	
       
   674 	
       
   675 	
       
   676 
       
   677 	
       
   678 //parse and set the request or Response array 
       
   679 void CPipeliningTestParams::SetSequenceArrL(const TDesC& aRawRequestOrResponseArr, TInt aInt)
       
   680 	{
       
   681 	TInt jj;
       
   682 	TInt ii;
       
   683 	TInt arrMemberInt = -1;
       
   684 	RArray < TInt > aArray;
       
   685 	CleanupClosePushL(aArray);
       
   686 	ii = 0;
       
   687 	jj = 0;
       
   688 	if (aRawRequestOrResponseArr[jj] == ' ')
       
   689 		{
       
   690 		++jj;
       
   691 		}		
       
   692 	
       
   693 	TInt arrSize = aRawRequestOrResponseArr.Length();
       
   694 	for ( ii=0; ii < arrSize  ; ++ii )
       
   695 		{
       
   696 		if ( ( aRawRequestOrResponseArr[ii] == ',') ) //one integer, so process it
       
   697 			{
       
   698 			TPtrC intCharPtr = aRawRequestOrResponseArr.Mid ( jj, (ii - jj) );
       
   699 			TLex	intLex2SlicePtr( intCharPtr );
       
   700 			arrMemberInt = -1;
       
   701 			intLex2SlicePtr.Val(arrMemberInt);
       
   702 			
       
   703 			if ( aInt == ETransactionArray )
       
   704 				{
       
   705 				User::LeaveIfError(iTransArr.Append(arrMemberInt));
       
   706 				}
       
   707 			else
       
   708 				{
       
   709 				User::LeaveIfError(aArray.Append(arrMemberInt));
       
   710 				}
       
   711 				
       
   712 			jj = ii + 1;
       
   713 			if ( aRawRequestOrResponseArr[jj] == ' ' )
       
   714 				{
       
   715 					++jj;
       
   716 				}			
       
   717 			}			
       
   718 		}
       
   719 		
       
   720 	TInt lastInt;
       
   721 	TPtrC lastCharPtr = aRawRequestOrResponseArr.Mid ( jj, (aRawRequestOrResponseArr.Length() - jj ) );
       
   722 	TLex	lastIntLex2SlicePtr( lastCharPtr );
       
   723 	lastIntLex2SlicePtr.Val(lastInt);
       
   724 	
       
   725 	if ( aInt == ETransactionArray )
       
   726 		{
       
   727 		User::LeaveIfError(iTransArr.Append( lastInt ));
       
   728 		}
       
   729 	else
       
   730 		{
       
   731 		User::LeaveIfError(aArray.Append( lastInt ));
       
   732 		}
       
   733 		
       
   734 	
       
   735 	if ( aInt == ERequestArray )
       
   736 		{
       
   737 		User::LeaveIfError(iConnReq2DArr.Append( aArray ));
       
   738 		}		
       
   739 	else if ( aInt == EResponseArray )
       
   740 		{
       
   741 		User::LeaveIfError(iConnResp2DArr.Append( aArray ));
       
   742 		}
       
   743 	CleanupStack::Pop();
       
   744 	}
       
   745 
       
   746 
       
   747 
       
   748 
       
   749 
       
   750 //return the reqarr value
       
   751 TInt CPipeliningTestParams::TransactionSequenceArray(TInt aIndex) const
       
   752 	{
       
   753 	__ASSERT_ALWAYS( ((aIndex < iTransArr.Count()) && (aIndex >= 0)), User::Invariant());
       
   754 
       
   755 	return iTransArr[aIndex];
       
   756 	}
       
   757 	
       
   758 	
       
   759 	
       
   760 //Need to write this up
       
   761 void CPipeliningTestParams::ValidateL() const
       
   762 	{
       
   763 	TInt err = KErrNone;
       
   764 	TBool localUri = EFalse;
       
   765 	
       
   766 	// Are all mandatory fields present?
       
   767 	// TestCaseName
       
   768 	__ASSERT_ALWAYS((iTestCaseNameBuf->Des().Length() > 0), User::Leave(KErrGeneral));
       
   769 	
       
   770 	// Uri/Uri(n)
       
   771 	__ASSERT_ALWAYS(iUriBufArr.Count() > 0, User::Leave(KErrGeneral));
       
   772 
       
   773 	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)));
       
   774 	
       
   775 	// Pipelining or Batching
       
   776 	__ASSERT_ALWAYS((iPipeliningEnabled) || (iBatchingEnabled), User::Leave(KErrGeneral));	
       
   777 
       
   778 	// TotalTransactionCount
       
   779 	__ASSERT_ALWAYS(iTotalTransactionCount > 0, User::Leave(KErrGeneral));
       
   780 		
       
   781 	// TransArr
       
   782 	__ASSERT_ALWAYS(iTransArr.Count() == (iTotalTransactionCount), User::Leave(KErrGeneral));
       
   783 	
       
   784 	// ConnectionCount
       
   785 	__ASSERT_ALWAYS(((!(localUri) && (iConnectionCount == 0)) || (iConnectionCount > 0)), User::Leave(KErrGeneral));
       
   786 	
       
   787 	// RawRequest
       
   788 	// Greater than 0
       
   789 	__ASSERT_ALWAYS(iRawRequestBufArr.Count() > 0, User::Leave(KErrGeneral));
       
   790 	
       
   791 	// RawResponse
       
   792 	// Need not be there if connecting to external uri
       
   793 	// Single external uri 
       
   794 	__ASSERT_ALWAYS((localUri) || (iRawResponseBufArr.Count() > 0), User::Leave(KErrGeneral));
       
   795 /*			
       
   796 	if (localUri && iConnectionCount > 0 && !(iTestCaseNameBuf->Des().Compare(_L("Defect Fix INC036954")) == 0))
       
   797 		{
       
   798 		__ASSERT_ALWAYS(iConnReq2DArr.Count() == iConnectionCount, User::Leave(KErrGeneral));	
       
   799 		}	
       
   800 	// Are all optional fields correctly present?
       
   801 */	
       
   802 	User::LeaveIfError( err );
       
   803 	}