applayerprotocols/httptransportfw/Test/testhttpmessage/ctestmessagecomposer.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 // defines test classes: CTestMessageComposer
       
    15 // 
       
    16 //
       
    17 #if !defined __CTESTMESSAGECOMPOSER_H__
       
    18 #include "ctestmessagecomposer.h"
       
    19 #endif
       
    20 
       
    21 _LIT8(KUri, "http://www.connecting.nokia.com");
       
    22 
       
    23 CTestMessageComposer* CTestMessageComposer::NewL(MTestObserver& aObserver)
       
    24 	{
       
    25 	CTestMessageComposer* self = new(ELeave) CTestMessageComposer(aObserver);
       
    26 	CleanupStack::PushL(self);
       
    27 	self->ConstructL();
       
    28 	CleanupStack::Pop(self);
       
    29 	return self;
       
    30 	}
       
    31 
       
    32 CTestMessageComposer::~CTestMessageComposer()
       
    33 	{
       
    34 	iHeaders.Close();
       
    35 	iTransaction.Close();
       
    36 	iSession.Close();
       
    37 	iMessageComposer.Close();
       
    38 	Cancel();
       
    39 	}
       
    40 
       
    41 CTestMessageComposer::CTestMessageComposer(MTestObserver& aObserver)
       
    42 : CActive(CActive::EPriorityStandard), iObserver(aObserver)
       
    43 	{
       
    44 	CActiveScheduler::Add(this);
       
    45 	}
       
    46 
       
    47 void CTestMessageComposer::ConstructL()
       
    48 	{
       
    49 	iSession.OpenL();
       
    50 	iStringPool = iSession.StringPool();
       
    51 	iMessageComposer.OpenL(*this);
       
    52 	TUriParser8 up;
       
    53 	up.Parse(KUri);
       
    54 	iTransaction = iSession.OpenTransactionL(up, *this, iSession.StringPool().StringF(HTTP::EGET,RHTTPSession::GetTable()));
       
    55 	}
       
    56 
       
    57 void CTestMessageComposer::SetHeaderL(TInt aNumberofHeaders)
       
    58 	{
       
    59 	switch (aNumberofHeaders)
       
    60 		{
       
    61 		case 1:	
       
    62 			{
       
    63 			// Open strings used in this test	
       
    64 			//1.Accept header----  Accept: text/html; q=0.8, text/vnd.wap.wml; q=0.2; extended=value, text/*);
       
    65 			RStringF textHtml = iStringPool.StringF(HTTP::ETextHtml,RHTTPSession::GetTable());
       
    66 			RStringF textWml  = iStringPool.StringF(HTTP::ETextVndWapWml,RHTTPSession::GetTable());
       
    67 			RStringF textAny  = iStringPool.StringF(HTTP::ETextAny,RHTTPSession::GetTable());
       
    68 			RStringF extended  = iStringPool.OpenFStringL(_L8("extended"));
       
    69 			CleanupClosePushL(extended);
       
    70 			RStringF extendVal = iStringPool.OpenFStringL(_L8("value"));
       
    71 			CleanupClosePushL(extendVal);
       
    72 			iHTTPHeaders = iTransaction.Request().GetHeaderCollection();
       
    73 			RStringF accept = iStringPool.StringF(HTTP::EAccept,RHTTPSession::GetTable());
       
    74 			THTTPHdrVal accVal(textHtml);
       
    75 			THTTPHdrVal q1(THTTPHdrVal::TQConv(0.8));
       
    76 			iHTTPHeaders.SetFieldL(accept, accVal, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q1);
       
    77 			accVal.SetStrF(textWml);
       
    78 			q1.SetInt(THTTPHdrVal::TQConv(0.2));
       
    79 			iHTTPHeaders.SetFieldL(accept, accVal, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q1);
       
    80 			q1.SetStrF(extendVal);
       
    81 			iHTTPHeaders.SetFieldL(accept, accVal, extended, q1);
       
    82 			accVal.SetStrF(textAny);
       
    83 			iHTTPHeaders.SetFieldL(accept, accVal);
       
    84 			CleanupStack::PopAndDestroy(2, &extended);
       
    85 		
       
    86 			//2.Accept-Charset header-- Accept-Charset: iso-8859-5, unicode-1-1; q=0.8
       
    87 			RStringF iso8859_5 = iStringPool.OpenFStringL(_L8("iso-8859-5"));
       
    88 			CleanupClosePushL(iso8859_5);
       
    89 			RStringF unicode1_1  = iStringPool.OpenFStringL(_L8("unicode-1-1"));
       
    90 			CleanupClosePushL(unicode1_1);
       
    91 			RStringF accChSet= iStringPool.StringF(HTTP::EAcceptCharset,RHTTPSession::GetTable());
       
    92 			THTTPHdrVal accChSetVal(iso8859_5);
       
    93 			iHTTPHeaders.SetFieldL(accChSet, accChSetVal);
       
    94 			//
       
    95 			accChSetVal.SetStrF(unicode1_1);
       
    96 			THTTPHdrVal q2(THTTPHdrVal::TQConv(0.8));
       
    97 			iHTTPHeaders.SetFieldL(accChSet, accChSetVal, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q2);
       
    98 			CleanupStack::PopAndDestroy(2, &iso8859_5);
       
    99 			
       
   100 			//3.User-Agent headers-- User-Agent: CERN-LineMode/2.15 libwww/2.17b3
       
   101 			// Open strings used in this test
       
   102 			RStringF ua1Str = iStringPool.OpenFStringL(_L8("CERN-LineMode/2.15"));
       
   103 			CleanupClosePushL(ua1Str);
       
   104 			RStringF ua2Str = iStringPool.OpenFStringL(_L8("libwww/2.17b3"));
       
   105 			CleanupClosePushL(ua2Str);
       
   106 			//
       
   107 			RStringF uaStr = iStringPool.StringF(HTTP::EUserAgent,RHTTPSession::GetTable());
       
   108 			THTTPHdrVal uaVal(ua1Str);
       
   109 			iHTTPHeaders.SetFieldL(uaStr, uaVal); // sets part 1
       
   110 			uaVal.SetStrF(ua2Str);
       
   111 			iHTTPHeaders.SetFieldL(uaStr, uaVal); // sets part 2
       
   112 			CleanupStack::PopAndDestroy(2,&ua1Str);
       
   113 			
       
   114 			//4.Connection Header -- Connection: close, keep-alive
       
   115 			RStringF otherToken = iStringPool.StringF(HTTP::EKeepAlive,RHTTPSession::GetTable());
       
   116 			RStringF connStr = iStringPool.StringF(HTTP::EConnection,RHTTPSession::GetTable());
       
   117 			THTTPHdrVal connVal(iStringPool.StringF(HTTP::EClose,RHTTPSession::GetTable()));
       
   118 			iHTTPHeaders.SetFieldL(connStr, connVal); // sets part 1
       
   119 			THTTPHdrVal keepAlive(otherToken);
       
   120 			iHTTPHeaders.SetFieldL(connStr, keepAlive); // sets part 2
       
   121 			
       
   122 			//5.content type header-- Content-Type: text/vnd.wap.wml; charset=utf-8; transcode=yes
       
   123 			RStringF textWml1   = iStringPool.StringF(HTTP::ETextVndWapWml,RHTTPSession::GetTable());
       
   124 			RStringF utf8	  = iStringPool.OpenFStringL(_L8("utf-8"));
       
   125 			CleanupClosePushL(utf8);
       
   126 			RStringF extended1  = iStringPool.OpenFStringL(_L8("transcode"));
       
   127 			CleanupClosePushL(extended1);
       
   128 			RStringF extendVal1 = iStringPool.OpenFStringL(_L8("yes"));
       
   129 			CleanupClosePushL(extendVal1);
       
   130 			//
       
   131 			RStringF contType = iStringPool.StringF(HTTP::EContentType,RHTTPSession::GetTable());
       
   132 			THTTPHdrVal ctVal(textWml1);
       
   133 			THTTPHdrVal chSet(utf8);
       
   134 			iHTTPHeaders.SetFieldL(contType, ctVal, iStringPool.StringF(HTTP::ECharset,RHTTPSession::GetTable()), chSet);
       
   135 			chSet.SetStrF(extendVal1);
       
   136 			iHTTPHeaders.SetFieldL(contType, ctVal, extended1, chSet);
       
   137 			CleanupStack::PopAndDestroy(3,&utf8);
       
   138 			
       
   139 			//6.host type header-- Host: nokia.com
       
   140 			RStringF host1Str = iStringPool.OpenFStringL(_L8("www.nokia.com"));
       
   141 			CleanupClosePushL(host1Str);
       
   142 			RStringF host = iStringPool.StringF(HTTP::EHost,RHTTPSession::GetTable());
       
   143 			THTTPHdrVal hostVal(host1Str);
       
   144 			iHTTPHeaders.SetFieldL(host, hostVal);
       
   145 			CleanupStack::PopAndDestroy(&host1Str);
       
   146 			
       
   147 			//7.upgrade type header-- Upgrade: HTTP/2.0, SHTTP/1.3
       
   148 			RStringF http = iStringPool.OpenFStringL(_L8("HTTP/2.0"));
       
   149 			CleanupClosePushL(http);
       
   150 			RStringF shttp = iStringPool.OpenFStringL(_L8("SHTTP/1.3"));
       
   151 			CleanupClosePushL(shttp);
       
   152 			RStringF upgradeStr = iStringPool.StringF(HTTP::EUpgrade, RHTTPSession::GetTable());
       
   153 			THTTPHdrVal val(http);
       
   154 			THTTPHdrVal val2(shttp);
       
   155 			
       
   156 			iHTTPHeaders.SetFieldL(upgradeStr, val);
       
   157 			iHTTPHeaders.SetFieldL(upgradeStr, val2);
       
   158 			CleanupStack::PopAndDestroy(2);
       
   159 			
       
   160 			//8.Cache control -- Cache-Control: public, no-cache=\"wibble,wobble\"
       
   161 			_LIT8(KPublic, "public");
       
   162 			_LIT8(KNoCache, "no-cache=\"wibble,wobble\"");
       
   163 			RStringF publicStr = iStringPool.OpenFStringL(KPublic);
       
   164 			CleanupClosePushL(publicStr);
       
   165 			RStringF noCacheStr = iStringPool.OpenFStringL(KNoCache);
       
   166 			CleanupClosePushL(noCacheStr);
       
   167 			RStringF cc = iStringPool.StringF(HTTP::ECacheControl,RHTTPSession::GetTable());
       
   168 			iHTTPHeaders.SetFieldL(cc, THTTPHdrVal(publicStr));
       
   169 			iHTTPHeaders.SetFieldL(cc, THTTPHdrVal(noCacheStr));
       
   170 			CleanupStack::PopAndDestroy(2,&publicStr);
       
   171 			
       
   172 			//9.Authorization-- Authorization: Basic c3ltYmlhbjpmMXN5bmNtbA==
       
   173 			RString basicCred = iStringPool.OpenStringL(_L8("c3ltYmlhbjpmMXN5bmNtbA=="));
       
   174 			CleanupClosePushL(basicCred);
       
   175 			RStringF authStr = iStringPool.StringF(HTTP::EAuthorization,RHTTPSession::GetTable());
       
   176 			THTTPHdrVal authVal(iStringPool.StringF(HTTP::EBasic,RHTTPSession::GetTable()));
       
   177 			iHTTPHeaders.SetFieldL(authStr, authVal); // sets part 1
       
   178 			THTTPHdrVal credVal(basicCred);
       
   179 			iHTTPHeaders.SetFieldL(authStr, credVal); // sets part 2
       
   180 			CleanupStack::PopAndDestroy(&basicCred);
       
   181 			break;
       
   182 			}
       
   183 		
       
   184 		case 2:	
       
   185 			{
       
   186 			//1. Connection: Keep-Alive\r\n
       
   187 			RStringF keep = iStringPool.StringF(HTTP::EKeepAlive,RHTTPSession::GetTable());
       
   188 			iHTTPHeaders = iTransaction.Request().GetHeaderCollection();
       
   189 			RStringF Connection= iStringPool.StringF(HTTP::EConnection,RHTTPSession::GetTable());
       
   190 			THTTPHdrVal keepalive(keep);
       
   191 			iHTTPHeaders.SetFieldL(Connection,keepalive);
       
   192 			
       
   193 			//2.Host: 192.168.100.100\r\n
       
   194 			_LIT8(KHostIp, "192.168.100.100");
       
   195 			RStringF host2Str = iStringPool.OpenFStringL(KHostIp);
       
   196 			CleanupClosePushL(host2Str);
       
   197 			RStringF host2= iStringPool.StringF(HTTP::EHost,RHTTPSession::GetTable());
       
   198 			THTTPHdrVal hostip(host2Str);
       
   199 			iHTTPHeaders.SetFieldL(host2,hostip);
       
   200 			CleanupStack::PopAndDestroy(&host2Str);
       
   201 			//3.Accept: */*\r\n
       
   202 			_LIT8(KAccept2, "*/*");
       
   203 			RStringF acceptall = iStringPool.OpenFStringL(KAccept2);
       
   204 			CleanupClosePushL(acceptall);
       
   205 			RStringF accept2= iStringPool.StringF(HTTP::EAccept,RHTTPSession::GetTable());
       
   206 			THTTPHdrVal acceptvalue(acceptall);
       
   207 			iHTTPHeaders.SetFieldL(accept2,acceptvalue);
       
   208 			CleanupStack::PopAndDestroy(&acceptall);
       
   209 			
       
   210 			//4.Accept-Charset: iso-8859-1,utf-8;q=0.7,*;q=0.7\r\n
       
   211 			RStringF iso8859 = iStringPool.OpenFStringL(_L8("iso-8859-1"));
       
   212 			CleanupClosePushL(iso8859);
       
   213 			RStringF utf8_1  = iStringPool.OpenFStringL(_L8("utf-8"));
       
   214 			CleanupClosePushL(utf8_1);
       
   215 			RStringF all  = iStringPool.OpenFStringL(_L8("*"));
       
   216 			CleanupClosePushL(all);
       
   217 			RStringF accChSet1= iStringPool.StringF(HTTP::EAcceptCharset,RHTTPSession::GetTable());
       
   218 			THTTPHdrVal accChSetVal1(iso8859);
       
   219 			iHTTPHeaders.SetFieldL(accChSet1, accChSetVal1);
       
   220 			accChSetVal1.SetStrF(utf8_1);
       
   221 			THTTPHdrVal q3(THTTPHdrVal::TQConv(0.7));
       
   222 			iHTTPHeaders.SetFieldL(accChSet1, accChSetVal1, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q3);
       
   223 			accChSetVal1.SetStrF(all);
       
   224 			iHTTPHeaders.SetFieldL(accChSet1, accChSetVal1, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q3);	
       
   225 			CleanupStack::PopAndDestroy(3,&iso8859);
       
   226 			
       
   227 			//5.Accept-Encoding: gzip, deflate, x-gzip, identity; q=0.9\r\n
       
   228 			RStringF gzip = iStringPool.OpenFStringL(_L8("gzip"));
       
   229 			CleanupClosePushL(gzip);
       
   230 			RStringF deflate  = iStringPool.OpenFStringL(_L8("deflate"));
       
   231 			CleanupClosePushL(deflate);
       
   232 			RStringF xgzip  = iStringPool.OpenFStringL(_L8("x-gzip"));
       
   233 			CleanupClosePushL(xgzip);
       
   234 			RStringF identity  = iStringPool.OpenFStringL(_L8("identity"));
       
   235 			CleanupClosePushL(identity);
       
   236 			RStringF acceptencoding1= iStringPool.StringF(HTTP::EAcceptEncoding,RHTTPSession::GetTable());
       
   237 			THTTPHdrVal aevalue(gzip);
       
   238 			iHTTPHeaders.SetFieldL(acceptencoding1, aevalue);
       
   239 			aevalue.SetStrF(deflate);
       
   240 			iHTTPHeaders.SetFieldL(acceptencoding1, aevalue);
       
   241 			aevalue.SetStrF(xgzip);
       
   242 			iHTTPHeaders.SetFieldL(acceptencoding1, aevalue);
       
   243 			aevalue.SetStrF(identity);
       
   244 			THTTPHdrVal q4(THTTPHdrVal::TQConv(0.9));
       
   245 			iHTTPHeaders.SetFieldL(acceptencoding1, aevalue, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q4);
       
   246 			CleanupStack::PopAndDestroy(4,&gzip);
       
   247 			
       
   248 			//6.Accept-Language: en;q=1.0,bg;q=0.5,nl;q=0.5,fr;q=0.5\r\n
       
   249 			RStringF en = iStringPool.OpenFStringL(_L8("en"));
       
   250 			CleanupClosePushL(en);
       
   251 			RStringF bg  = iStringPool.OpenFStringL(_L8("bg"));
       
   252 			CleanupClosePushL(bg);
       
   253 			RStringF nl  = iStringPool.OpenFStringL(_L8("nl"));
       
   254 			CleanupClosePushL(nl);
       
   255 			RStringF fr  = iStringPool.OpenFStringL(_L8("fr"));
       
   256 			CleanupClosePushL(fr);
       
   257 			RStringF acceptlanguage1= iStringPool.StringF(HTTP::EAcceptLanguage,RHTTPSession::GetTable());
       
   258 			THTTPHdrVal alvalue(en);
       
   259 			THTTPHdrVal q5(THTTPHdrVal::TQConv(1.0));
       
   260 			iHTTPHeaders.SetFieldL(acceptlanguage1, alvalue, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q5);
       
   261 			THTTPHdrVal q6(THTTPHdrVal::TQConv(0.5));
       
   262 			alvalue.SetStrF(bg);
       
   263 			iHTTPHeaders.SetFieldL(acceptlanguage1, alvalue, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q6);
       
   264 			alvalue.SetStrF(nl);
       
   265 			iHTTPHeaders.SetFieldL(acceptlanguage1, alvalue, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q6);
       
   266 			alvalue.SetStrF(fr);
       
   267 			iHTTPHeaders.SetFieldL(acceptlanguage1, alvalue, iStringPool.StringF(HTTP::EQ,RHTTPSession::GetTable()), q6);
       
   268 			CleanupStack::PopAndDestroy(4,&en);
       
   269 		
       
   270 			//7.Referer: http://192.168.100.100/il/index.html\r\n
       
   271 			RStringF referer = iStringPool.OpenFStringL(_L8("http://192.168.100.100/il/index.html"));
       
   272 			CleanupClosePushL(referer);
       
   273 			RStringF refer= iStringPool.StringF(HTTP::EReferer,RHTTPSession::GetTable());
       
   274 			THTTPHdrVal referval(referer);
       
   275 			iHTTPHeaders.SetFieldL(refer,referval);
       
   276 			CleanupStack::PopAndDestroy(&referer);	
       
   277 			
       
   278 			//8.User-Agent: Mozilla/5.0 AppleWebKit/525
       
   279 			RStringF ua1Str1 = iStringPool.OpenFStringL(_L8("Mozilla/5.0"));
       
   280 			CleanupClosePushL(ua1Str1);
       
   281 			RStringF ua2Str2 = iStringPool.OpenFStringL(_L8("AppleWebKit/525"));
       
   282 			CleanupClosePushL(ua2Str2);
       
   283 			RStringF uaString = iStringPool.StringF(HTTP::EUserAgent,RHTTPSession::GetTable());
       
   284 			THTTPHdrVal uaVal1(ua1Str1);
       
   285 			iHTTPHeaders.SetFieldL(uaString, uaVal1); // sets part 1
       
   286 			uaVal1.SetStrF(ua2Str2);
       
   287 			iHTTPHeaders.SetFieldL(uaString, uaVal1); // sets part 2
       
   288 			CleanupStack::PopAndDestroy(2,&ua1Str1);
       
   289 			break;
       
   290 			}
       
   291 			
       
   292 		default:
       
   293 			break;	
       
   294 		}
       
   295 	}
       
   296 
       
   297 void CTestMessageComposer::StartRequest()
       
   298 	{
       
   299 	// Self-complete to kick-off the test.
       
   300 	CompleteSelf();
       
   301 	}
       
   302 
       
   303 void CTestMessageComposer::CompleteSelf()
       
   304 	{
       
   305 	TRequestStatus* pStat = &iStatus;
       
   306 	User::RequestComplete(pStat, KErrNone);
       
   307 	SetActive();
       
   308 	}
       
   309 
       
   310 void CTestMessageComposer::DoReset()
       
   311 	{
       
   312 	}
       
   313 
       
   314 /*
       
   315  *	Methods from CActive
       
   316  */
       
   317 
       
   318 void CTestMessageComposer::RunL()
       
   319 	{
       
   320 	iHeaderIndex = 0;
       
   321 	iFlag = ETrue;
       
   322 	// Start the composer...
       
   323 	iMessageComposer.MessageInfoAvailable();
       
   324 	}
       
   325 
       
   326 void CTestMessageComposer::DoCancel()
       
   327 	{
       
   328 	// Do nothing...
       
   329 	}
       
   330 
       
   331 TInt CTestMessageComposer::RunError(TInt /*aError*/)
       
   332 	{
       
   333 	return KErrNone;
       
   334 	}
       
   335 
       
   336 /*
       
   337  *	Methods from MHttpMessageComposerObserver
       
   338  */
       
   339 
       
   340 void CTestMessageComposer::StartLineL(TPtrC8& aMethod, TPtrC8& aRequestUri, TPtrC8& aVersion)
       
   341 	{
       
   342 	// The RFC2616 defines the Request-Line as follows - 
       
   343 	// 
       
   344 	// Request-Line = Method SP Request-URI SP HTTPVersion CRLF
       
   345 	//
       
   346 	// Get Method...
       
   347 	iRequest = iTransaction.Request();
       
   348 	RStringF method = iStringPool.StringF(iRequest.Method());
       
   349 	aMethod.Set(method.DesC());
       
   350 	
       
   351 	// Get the Request-URI...
       
   352 	aRequestUri.Set(KUri);
       
   353 	
       
   354 	// Assume HTTP/1.1
       
   355 	aVersion.Set(iStringPool.StringF(HTTP::EHttp11, RHTTPSession::GetTable()).DesC());
       
   356 	}
       
   357 
       
   358 TInt CTestMessageComposer::NextHeaderL(TPtrC8& aHeaderName, TPtrC8& aHeaderValue)
       
   359 	{
       
   360 	if(iFlag)
       
   361 	{
       
   362 		THTTPHdrFieldIter it = iHTTPHeaders.Fields();
       
   363 		iFlag = EFalse;
       
   364 		while(!it.AtEnd())
       
   365 			{
       
   366 			// Get field current field.
       
   367 			RStringF name = iStringPool.StringF(it());
       
   368 			CleanupClosePushL(name);
       
   369 			// Get the OTA version of the field value
       
   370 			TPtrC8 value;
       
   371 			iRequest.GetHeaderCollection().GetRawField(name, value);
       
   372 			User::LeaveIfError(iHeaders.Append(THeaderField(name.DesC(), value)));		
       
   373 			// Move onto next header field...
       
   374 			++it;
       
   375 			CleanupStack::PopAndDestroy(&name);
       
   376 			}
       
   377 	}
       
   378 	TInt error = ( iHeaderIndex < iHeaders.Count() ) ? KErrNone : KErrNotFound;
       
   379 	if( iHeaderIndex < iHeaders.Count() )
       
   380 		{
       
   381 		// Give the current header info...
       
   382 		THeaderField header = iHeaders[iHeaderIndex];
       
   383 
       
   384 		aHeaderName.Set(header.iName);
       
   385 		aHeaderValue.Set(header.iValue);
       
   386 
       
   387 		// Loop to next header...
       
   388 		++iHeaderIndex;
       
   389 		}
       
   390 	else
       
   391 		{
       
   392 		// No more headers - change state
       
   393 		iState = EPendingHasBody;
       
   394 		}
       
   395 	return error;
       
   396 	}
       
   397 
       
   398 
       
   399 
       
   400 TInt CTestMessageComposer::NextTrailerL(TPtrC8& /*aHeaderName*/, TPtrC8& /*aHeaderValue*/)
       
   401 	{
       
   402 	return KErrNotFound;
       
   403 	}
       
   404 
       
   405 void CTestMessageComposer::MessageComplete()
       
   406 	{
       
   407 	iState = EDone;
       
   408 	iObserver.NotifyComplete();
       
   409 	}
       
   410 
       
   411 void CTestMessageComposer::MessageDataReadyL()
       
   412 	{
       
   413 	//		// Get data from the composer
       
   414 	TPtrC8 data;
       
   415 	iMessageComposer.GetMessageData(data);
       
   416 	iMessageComposer.ReleaseMessageData();
       
   417 	}
       
   418 
       
   419 TInt CTestMessageComposer::HandleComposeError(TInt /*aError*/)
       
   420 	{
       
   421 	return KErrNone;
       
   422 	}
       
   423 
       
   424 MHTTPDataSupplier* CTestMessageComposer::HasBodyL()
       
   425 	{
       
   426 	iState = EPendingMessageComplete;
       
   427 	return NULL;
       
   428 	}
       
   429 
       
   430 void CTestMessageComposer::Reserved_MHttpMessageComposerObserver()
       
   431 	{
       
   432 	User::Invariant();
       
   433 	}
       
   434 
       
   435 TInt CTestMessageComposer::MHFRunError(TInt /*aError*/, RHTTPTransaction /*aTransaction*/, const THTTPEvent& /*aEvent*/)
       
   436 	{
       
   437 	return KErrNone;
       
   438 	}
       
   439 
       
   440 void CTestMessageComposer::MHFRunL(RHTTPTransaction /*aTransaction*/, const THTTPEvent& /*aEvent*/)
       
   441 	{
       
   442 	}
       
   443