src/HttpClient.cpp
author tahirm@symbian.org
Fri, 24 Jul 2009 08:46:02 +0100
changeset 0 0049171ecffb
permissions -rw-r--r--
initial release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     1
/*
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     2
 ============================================================================
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     3
 Name	: HttpClient.cpp
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     4
 Author	: John Kern
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     5
 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     6
 Copyright (c) 2009 Symbian Foundation Ltd
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     7
 This component and the accompanying materials are made available
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     8
 under the terms of the License "Eclipse Public License v1.0"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     9
 which accompanies this distribution, and is available
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    10
 at the URL "http://www.eclipse.org/legal/epl-v10.html".
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    11
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    12
 Initial Contributors:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    13
 - Symbian Foundation Ltd - initial contribution.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    14
 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    15
 Contributors:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    16
 - John Kern
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    17
 - Symsource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    18
 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    19
 Description : Web client 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    20
 ============================================================================
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    21
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    22
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    23
#include <activeapdb.h>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    24
#include <HttpStringConstants.h>  // HTTP
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    25
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    26
#include "HttpClient.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    27
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    28
// HTTP header values
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    29
_LIT8(KUserAgent, "NPR 1.0");		// Name of the client app.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    30
_LIT8(KAccept, "text/*");	// Accept any (but only) text content (errors may not be sent as "text/x-visto-ota-activation").
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    31
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    32
CHttpClient* CHttpClient::NewL(MHTTPObserver& aObserver)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    33
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    34
	CHttpClient* self = new (ELeave)CHttpClient(aObserver);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    35
	CleanupStack::PushL(self);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    36
	self->ConstructL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    37
	CleanupStack::Pop();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    38
	return self;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    39
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    40
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    41
CHttpClient::CHttpClient(MHTTPObserver& aObserver)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    42
	:iObserver(aObserver)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    43
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    44
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    45
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    46
CHttpClient::~CHttpClient()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    47
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    48
	if (iTransactionActive)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    49
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    50
		iHttpTransaction.Cancel();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    51
		iTransactionActive = EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    52
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    53
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    54
	iHTTPSession.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    55
	iConnection.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    56
	iSocketServ.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    57
	delete iResponseBuffer;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    58
	delete iUri;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    59
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    60
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    61
void CHttpClient::ConstructL()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    62
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    63
	// Open the Http session
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    64
	iHTTPSession.OpenL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    65
    User::LeaveIfError(iSocketServ.Connect());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    66
    User::LeaveIfError(iConnection.Open(iSocketServ));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    67
    User::LeaveIfError(iConnection.Start());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    68
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    69
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    70
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    71
void CHttpClient::SendRequestL(const TDesC& aUri)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    72
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    73
	if(iUri)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    74
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    75
		delete iUri;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    76
		iUri = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    77
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    78
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    79
	iUri = HBufC8::NewL(aUri.Length());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    80
	TPtr8 uriPtr = iUri->Des();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    81
	uriPtr.Copy(aUri);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    82
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    83
	TUriParser8 uriParser;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    84
	User::LeaveIfError(uriParser.Parse(uriPtr));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    85
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    86
	TBuf8<256> buf;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    87
	buf.Copy(uriParser.UriDes());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    88
			
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    89
	RStringPool strPool = iHTTPSession.StringPool();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    90
	iHttpConnInfo = iHTTPSession.ConnectionInfo();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    91
	iHttpConnInfo.SetPropertyL(strPool.StringF(HTTP::EHttpSocketServ, RHTTPSession::GetTable() ), THTTPHdrVal(iSocketServ.Handle()));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    92
	iHttpConnInfo.SetPropertyL(strPool.StringF(HTTP::EHttpSocketConnection, RHTTPSession::GetTable() ),THTTPHdrVal (REINTERPRET_CAST(TInt, &(iConnection))));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    93
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    94
	if(iTransactionActive)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    95
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    96
		iHttpTransaction.Cancel();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    97
		iHttpTransaction.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    98
		iTransactionActive = EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    99
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   100
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   101
	// Create transaction
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   102
	iHttpTransaction = iHTTPSession.OpenTransactionL(
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   103
		uriParser, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   104
		*this,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   105
		iHTTPSession.StringPool().StringF(HTTP::EPOST, RHTTPSession::GetTable()));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   106
	iTransactionActive = ETrue;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   107
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   108
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   109
	// Set transaction headers.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   110
	RHTTPHeaders headers = iHttpTransaction.Request().GetHeaderCollection();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   111
	AddHeaderL(headers, HTTP::EUserAgent, KUserAgent);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   112
	AddHeaderL(headers, HTTP::EAccept, KAccept);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   113
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   114
	// Delete any previous response.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   115
	delete iResponseBuffer;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   116
	iResponseBuffer = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   117
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   118
	// Set the body.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   119
	iHttpTransaction.Request().SetBody(*this);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   120
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   121
	// Submit the request
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   122
	iHttpTransaction.SubmitL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   123
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   124
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   125
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   126
* Add a header to a header set
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   127
*
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   128
* @param aHeaders The header set to be modified
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   129
* @param aHeaderField The name of the header to be added
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   130
* @param aHeaderValue The value for the header to be added
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   131
*/
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   132
void CHttpClient::AddHeaderL(RHTTPHeaders aHeaders,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   133
								TInt aHeaderField,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   134
								const TDesC8& aHeaderValue)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   135
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   136
	RStringPool stringPool = iHTTPSession.StringPool();	// Do not close this session here.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   137
	RStringF valStr = stringPool.OpenFStringL(aHeaderValue);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   138
	CleanupClosePushL(valStr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   139
	THTTPHdrVal headerVal(valStr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   140
	aHeaders.SetFieldL(stringPool.StringF(aHeaderField, RHTTPSession::GetTable()), headerVal);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   141
	CleanupStack::PopAndDestroy();	// valStr
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   142
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   143
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   144
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   145
 * Add a header to a header set
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   146
 *
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   147
 * @param aHeaders The header set to be modified
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   148
 * @param aHeaderField The name of the header to be added
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   149
 * @param aHeaderValue The value for the header to be added
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   150
 * @param aExtensionValue The extension value for the header
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   151
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   152
void CHttpClient::AddHeaderL(RHTTPHeaders aHeaders, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   153
								TInt aHeaderField, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   154
								const TDesC8& aHeaderValue,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   155
								TInt aExtensionField,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   156
								const TDesC8& aExtensionValue)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   157
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   158
	RStringPool stringPool = iHTTPSession.StringPool();	// Do not close this session here.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   159
	RStringF valStr = stringPool.OpenFStringL(aHeaderValue);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   160
	CleanupClosePushL(valStr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   161
	THTTPHdrVal headerVal(valStr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   162
	RStringF extensionStr = stringPool.OpenFStringL(aExtensionValue);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   163
	CleanupClosePushL(extensionStr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   164
	THTTPHdrVal extensionVal(extensionStr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   165
	aHeaders.SetFieldL(
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   166
		stringPool.StringF(aHeaderField, RHTTPSession::GetTable()), 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   167
		headerVal,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   168
		stringPool.StringF(aExtensionField, RHTTPSession::GetTable()),
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   169
		extensionVal);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   170
	CleanupStack::PopAndDestroy(2);	// extensionStr, valStr
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   171
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   172
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   173
void CHttpClient::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent &aEvent)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   174
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   175
	switch (aEvent.iStatus){
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   176
		case THTTPEvent::EGotResponseHeaders:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   177
			{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   178
			// HTTP response headers have been received.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   179
			// Pass status information to observer.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   180
			RHTTPResponse resp = aTransaction.Response();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   181
			// Get status code
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   182
			TInt statusCode = resp.StatusCode();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   183
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   184
			// Get status text
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   185
			RStringF statusStr = resp.StatusText();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   186
			HBufC* statusBuf = HBufC::NewLC(statusStr.DesC().Length());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   187
			statusBuf->Des().Copy(statusStr.DesC());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   188
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   189
			// Inform observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   190
			iObserver.ResponseStatusL(statusCode, *statusBuf);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   191
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   192
			CleanupStack::PopAndDestroy(statusBuf);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   193
			break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   194
			}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   195
	    case THTTPEvent::EGotResponseBodyData:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   196
	    	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   197
			// Get text of response body
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   198
			MHTTPDataSupplier* dataSupplier = aTransaction.Response().Body();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   199
			TPtrC8 ptr;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   200
			dataSupplier->GetNextDataPart(ptr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   201
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   202
			// Append to iResponseBuffer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   203
			if (!iResponseBuffer)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   204
				{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   205
				iResponseBuffer = ptr.AllocL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   206
				}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   207
			else
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   208
				{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   209
				iResponseBuffer = iResponseBuffer->ReAllocL(iResponseBuffer->Length() + ptr.Length());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   210
				iResponseBuffer->Des().Append(ptr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   211
				}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   212
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   213
			// Release the body data
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   214
			dataSupplier->ReleaseData();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   215
			break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   216
			}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   217
	    case THTTPEvent::EResponseComplete:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   218
			iObserver.ResponseReceivedL(*iResponseBuffer);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   219
	    	break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   220
	    case THTTPEvent::ESucceeded:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   221
	    case THTTPEvent::EFailed:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   222
	    	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   223
	    	aTransaction.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   224
			iTransactionActive = EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   225
	    	break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   226
	    	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   227
		case THTTPEvent::ERedirectedPermanently:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   228
			break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   229
		case THTTPEvent::ERedirectedTemporarily:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   230
			break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   231
		default:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   232
			{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   233
			if (aEvent.iStatus < 0)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   234
				{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   235
				aTransaction.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   236
				iTransactionActive = EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   237
				}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   238
			break;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   239
			}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   240
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   241
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   242
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   243
TInt CHttpClient::MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& /*aEvent*/)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   244
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   245
	if(!aError)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   246
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   247
		aTransaction.Close();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   248
		iTransactionActive = EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   249
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   250
	return KErrNone;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   251
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   252
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   253
TBool CHttpClient::GetNextDataPart(TPtrC8& /*aDataPart*/)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   254
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   255
	// Not implemented for now as assuming that chunked response won't be sent 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   256
	// by the server
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   257
	return ETrue;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   258
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   259
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   260
void CHttpClient::ReleaseData()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   261
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   262
	// Not implemented for now as assuming that chunked response won't be sent 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   263
	// by the server
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   264
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   265
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   266
TInt CHttpClient::OverallDataSize()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   267
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   268
	// Not implemented for now as assuming that chunked response won't be sent 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   269
	// by the server
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   270
	return 0;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   271
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   272
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   273
TInt CHttpClient::Reset()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   274
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   275
	// Not implemented for now as assuming that chunked response won't be sent 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   276
	// by the server
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   277
	return KErrNone;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   278
	}