internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp
changeset 14 896e9dbc5f19
parent 12 608f67c22514
child 15 065198191975
--- a/internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp	Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1096 +0,0 @@
-/*
-* Copyright (c) 2006-2007 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:  ?Description
-*
-*/
-
-
-#include <httpstringconstants.h>
-#include <rhttpheaders.h>
-#include <mmfcontrollerpluginresolver.h> //to get the supported MIME types
-#ifdef ENABLE_USAGE_REPORT_TEST
-#include <bautils.h>
-#include "irreportsettings.h"
-#endif
-#include "irdataprovider.h"
-#include "irdebug.h"
-#include "irhttpdataprovider.h"
-#include "irhttppost.h"
-#include "irhttprequestdata.h"
-#include "irnetworkcontroller.h"
-#include "irdatatransferobserver.h"
-#include "irlogodownloadengine.h"
-#include "irfavoritesdb.h"
-#include "irsettings.h"
-
-//Added for ALR/SNAP
-const TInt KBufflengthMaxLength = 255;
-const TInt KWapProfileMaxLength = 20;
-const TInt KNokiaIrAppAcceptMaxLength = 25;
-const TInt KSize = 1024;
-const TInt KMaxSize = 2048;
-const TInt KBufSize = 10;
-const TUid KUidHelixController        = { 0x101F8514 }; // Helix Video controller UID
-const TInt KLogbufferLenth = KLogBufferSize/2 - 1;
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::CIRHttpDataProvider(MIRHttpDataProviderObserver&
-// aObserver):iObserver(aObserver),iRunning(EFalse)
-// Creates instance of CIRHttpDataProvider.
-// ---------------------------------------------------------------------------
-//
-CIRHttpDataProvider::CIRHttpDataProvider( MIRHttpDataProviderObserver
-    &aObserver ): iRunning( EFalse ), iObserver( aObserver )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::CIRHttpDataProvider" );
-    // Definition not required
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::~CIRHttpDataProvider()
-// Destructs instance of CIRHttpDataProvider.
-// ---------------------------------------------------------------------------
-//
-CIRHttpDataProvider::~CIRHttpDataProvider()
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::~CIRHttpDataProvider - Entering" );
-    iHttpSession.Close();
-    delete iLogMessage;
-    if(iIRNetworkControllerHandle)
-    	{
-    	iIRNetworkControllerHandle->Close();
-        }
-    if(iLogoDownloadEngine)
-    	{
-	    delete iLogoDownloadEngine;
-	    iLogoDownloadEngine = NULL;
-    	}
-    IRLOG_DEBUG( "CIRHttpDataProvider::~CIRHttpDataProvider - Exiting." );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::NewL(MIRHttpDataProviderObserver& aObserver )
-// Creates instance of CIRHttpDataProvider.
-// ---------------------------------------------------------------------------
-//
-CIRHttpDataProvider *CIRHttpDataProvider::NewL( MIRHttpDataProviderObserver
-	&aObserver )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::NewL - Entering" );
-    CIRHttpDataProvider *self = NewLC( aObserver );
-    CleanupStack::Pop(self);
-    IRLOG_DEBUG( "CIRHttpDataProvider::NewL - Exiting" );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::NewLC(MIRHttpDataProviderObserver& aObserver)
-// Creates instance of CIRHttpDataProvider.
-// ---------------------------------------------------------------------------
-//
-CIRHttpDataProvider *CIRHttpDataProvider::NewLC( MIRHttpDataProviderObserver
-    &aObserver )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::NewLC - Entering" );
-    CIRHttpDataProvider *self = new( ELeave )CIRHttpDataProvider( aObserver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    IRLOG_DEBUG( "CIRHttpDataProvider::NewLC - Exiting" );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::ConstructL()
-// 2nd phase construction
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::ConstructL()
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::ConstructL - Entering" );
-    iFirstTime = ETrue;
-    iIRNetworkControllerHandle = CIRNetworkController::OpenL();
-    iLogMessage = CIRHttpPost::NewL(iHttpTransaction);
-    iLogoDownloadEngine = CIRLogoDownloadEngine::NewL();
-    IRLOG_DEBUG( "CIRHttpDataProvider::ConstructL - Exiting" );
-    }
-
-EXPORT_C CIRLogoDownloadEngine* CIRHttpDataProvider::GetLogoDownloadEngine()
-{
-IRLOG_DEBUG( "CIRHttpDataProvider::GetLogoDownloadEngine" );
-	return iLogoDownloadEngine;
-}
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::CancelTransactionL()
-// Cancel the issued Http transaction
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::CancelTransaction()
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::CancelTransaction  - Entering" );
-    // Make sure that logfile is closed
-    CloseLogFile ();
-    if ( !iRunning )
-        {
-        return ;
-        }
-    // Close() also cancels transaction (Cancel() can also be used but
-    // resources allocated by transaction must be still freed with Close())
-    iHttpTransaction.Close();
-    // Not running anymore
-    iRunning = EFalse;
-    IRLOG_DEBUG( "CIRHttpDataProvider::CancelTransaction - Exiting." );
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::CloseLogFile  ( CIRHttpRequestData& aRequestInfo )
-// Used to Close the log file LogUsage.gz externally from other sources (bug-fixing)
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::CloseLogFile ()
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::CloseLogFile  - Entering" );
-	if (iLogMessage) iLogMessage->CloseLogFile ();
-	IRLOG_DEBUG( "CIRHttpDataProvider::CloseLogFile  - Exiting" );
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::IssueHttpRequestL( CIRHttpRequestData& aRequestInfo )
-// Used to issue the request.
-// ---------------------------------------------------------------------------
-//
-TInt CIRHttpDataProvider::IssueHttpRequestL( CIRHttpRequestData &aRequestInfo )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::IssueHttpRequestL - Entering" );
-    IRRDEBUG2("CIRHTTPDATAPROVIDER::IRHTTPISSUEREQUESTL",KNullDesC);
-    iNotModified = EFalse;
-    
-    if ( !( iIRNetworkControllerHandle->GetNetworkStatus() ) )
-        {
-        // Error Network connection inactive
-        return KErrCouldNotConnect;
-        }
-    if ( iFirstTime )
-        {
-        InitializeHttpDataProviderL();
-        iIRNetworkControllerHandle->InitializeHttpSessionL( iHttpSession,
-        			 MIRDataTransferTracker::EIRTransferCategoryIsds);
-        iFirstTime = EFalse;
-        }
-    // Parse string to URI (as defined in RFC2396)
-    TUriParser8 uri;
-    uri.Parse( aRequestInfo.iUri );
-    // Get request method string
-    RStringF method;
-    switch ( aRequestInfo.iMethod )
-        {
-        case EIRHttpGET:
-                {
-                method = iHttpSession.StringPool().StringF( HTTP::EGET,
-					RHTTPSession::GetTable() );
-                }
-            break;
-        case EIRHttpPOST:
-                {
-                method = iHttpSession.StringPool().StringF( HTTP::EPOST,
-					RHTTPSession::GetTable() );
-                }
-            break;
-        default:
-            {
-            }
-            break;
-        }
-    CleanupClosePushL( method );
-
-    IRLOG_DEBUG( "CIRHttpDataProvider::IssueHttpRequestL - Opening transaction" );
-    // Open transaction with previous method and parsed uri. This class will
-    // receive transaction events in MHFRunL and MHFRunError.
-    iHttpTransaction = iHttpSession.OpenTransactionL( uri,  *this, method );
-
-#ifdef ENABLE_USAGE_REPORT_TEST
-    RFs iFs;
-    User::LeaveIfError(iFs.Connect());
-    
-    TTime timeStamp;
-    //timeStamp.UniversalTime();
-    timeStamp.HomeTime();
-    TDateTime dateTime =  timeStamp.DateTime();
-    
-    _LIT(KFormatTime,"-%d-%d-%d %d.%d.%d.xml.gz\n");
-    TBuf<32>    sendTime;
-    sendTime.Format(KFormatTime,dateTime.Year(),TInt(dateTime.Month()+1),dateTime.Day()+1,
-                                dateTime.Hour(),dateTime.Minute(),dateTime.Second());
-
-    _LIT( KDstFilePath, "c:\\data\\IR_Log\\");
-    TFileName dstFileName(KDstFilePath);
-    dstFileName.Append(KGZipLogFileName);
-    dstFileName.Append(sendTime);
-    
-    iFs.MkDirAll(dstFileName);
-    
-    if ( aRequestInfo.iMethod == EIRHttpPOST )
-        {
-        CIRSettings * settings = CIRSettings::OpenL();
-        if(NULL != settings)
-            {
-            TFileName filePath = settings->PrivatePath();
-            filePath.Append( KGZipLogFileName );                   
-
-            BaflUtils::CopyFile(iFs, filePath, dstFileName);
-            settings->Close();
-        }
-    }
-#endif
-    
-    if ( aRequestInfo.iMethod == EIRHttpPOST )
-        {
-        IRLOG_DEBUG( "CIRHttpDataProvider::IssueHttpRequestL - POST method" );
-        // Close the LogFile
-        iLogMessage->CloseLogFile ();
-        iLogMessage->SetTransaction( iHttpTransaction );
-        TInt FileSize(KErrNone);
-        TRAPD(err, iLogMessage->GetFileToPostL(&FileSize));
-        if( err )
-	        {
-	        // failed to open the file to be posted hence cancel the request
-	        CleanupStack::PopAndDestroy(&method);
-	        iHttpTransaction.Close();
-	        return KErrCouldNotConnect;
-	        }
-        TBuf8<KBufflengthMaxLength> bufflength;
-        _LIT8(KFormat,"%d");
-        bufflength.Format(KFormat,FileSize);
-        aRequestInfo.iContentType.Copy(KPostContentType);
-        RHTTPRequest LogRequest;
-        LogRequest = iHttpTransaction.Request();
-        LogRequest.SetBody((MHTTPDataSupplier&) *iLogMessage);
-        RHTTPHeaders header = iHttpTransaction.Request().GetHeaderCollection();
-        SetHeaderL(header,HTTP::EContentType,aRequestInfo.iContentType );
-        SetHeaderL(header,HTTP::EContentLength,bufflength);
-        }
-
-
-     // Setup the headers for the HTTP request
-    BuildHeadersL(aRequestInfo);
-  
-    // Submit the transaction. After this the framework will give transaction
-    // events via MHFRunL and MHFRunError.
-    iHttpTransaction.SubmitL();
-   
-#ifdef ENABLE_USAGE_REPORT_TEST  
-    if ( aRequestInfo.iMethod == EIRHttpPOST )
-        {
-        _LIT( KSentPrefix, "X__");
-        TFileName sentLogFileName(KDstFilePath);
-        sentLogFileName.Append(KSentPrefix);
-        sentLogFileName.Append(KGZipLogFileName);
-        sentLogFileName.Append(sendTime);
-        BaflUtils::RenameFile(iFs, dstFileName, sentLogFileName);      
-        }
-    iFs.Close();
-#endif    
-    
-    CleanupStack::PopAndDestroy( &method );
-    iRunning = ETrue;
-    IRLOG_INFO( "CIRHttpDataProvider::IssueHttpRequestL - Submitted HTTP request" );
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::SetHttpContentType(TDesC& aContentType,TDesC& aCharSet)
-// Set the Http content type
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::SetHttpContentType( const TDesC &aContentType,
-    const TDesC &aCharSet )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::SetHttpContentType - Entering" );
-    iContentType.Copy( aContentType );
-    iCharSet.Copy( aCharSet );
-    IRLOG_DEBUG( "CIRHttpDataProvider::SetHttpContentType - Exiting." );
-    }
-
-
-void CIRHttpDataProvider::InitializeHttpDataProviderL()
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::InitializeHttpDataProviderL - Entering" );
-    iHttpSession.Close();
-    TRAPD( LeaveValue, iHttpSession.OpenL() );
-    if ( LeaveValue != KErrNone )
-        {
-        // Most common error; no access point configured, and session creation
-        // leaves with KErrNotFound.
-        // Load a string from the resource file and add the error code to string
-        User::Leave( LeaveValue );
-        }
-    // Set the HTTP connection properties
-    RStringPool strP = iHttpSession.StringPool();
-    RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo();
-    // RSocketServ Handle
-    connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketServ,
-		RHTTPSession::GetTable() ),
-		THTTPHdrVal( iIRNetworkControllerHandle->GetIRSocketServer().Handle() ) );
-    // RConnection Handle
-    TInt connPtr = REINTERPRET_CAST( TInt,
-		&( iIRNetworkControllerHandle->GetIRConnection() ) );
-
-    connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketConnection,
-		RHTTPSession::GetTable() ), THTTPHdrVal( connPtr ) );
-    // HTTP Version ( Specify that i am using HTTP/1.1
-
-	connInfo.SetPropertyL( strP.StringF( HTTP::EVersion,
-		RHTTPSession::GetTable() ),
-		THTTPHdrVal( strP.StringF( HTTP::EHttp11, RHTTPSession::GetTable() ) ) );
-
-	RStringF temp = strP.OpenFStringL( KAccept );
-    CleanupClosePushL( temp );
-    connInfo.SetPropertyL( strP.StringF( HTTP::EAccept,
-		RHTTPSession::GetTable() ), THTTPHdrVal( temp ) );
-
-	CleanupStack::PopAndDestroy( &temp );
-    iContentType.Copy( KDefaultContentType );
-    iCharSet.Copy( KDefaultCharSet );
-
-    IRLOG_DEBUG( "CIRHttpDataProvider::InitializeHttpDataProviderL - Exiting." );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::MHFRunL()
-// Inherited from MHTTPTransactionCallback
-// Called by framework to pass transaction events.
-// ---------------------------------------------------------------------------
-//
-
-void CIRHttpDataProvider::MHFRunL( RHTTPTransaction aTransaction,
-    const THTTPEvent &aEvent )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunL - Entering." );
-    
-    switch ( aEvent.iStatus )
-        {
-        case THTTPEvent::EGotResponseHeaders:
-            {
-            IRLOG_INFO( "CIRHttpDataProvider::MHFRunL - THTTPEvent::EGotResponseHeaders" );
-            IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--HEADERS",KNullDesC);
-            // HTTP response headers have been received. Use
-            // aTransaction.Response() to get the response. However, it's not
-            // necessary to do anything with the response when this event occurs.
-            // Get HTTP status code from header (e.g. 200)
-            RHTTPResponse resp = aTransaction.Response();
-            iStatusCode = resp.StatusCode();
-            // Get status text (e.g. "OK")
-            iStatusText.Copy(
-				( const unsigned short int* )resp.StatusText().DesC().Ptr(),
-				iStatusText.MaxLength() );
-            // Extract header field names and value
-	            	ExtractResponseHeadersL( aTransaction );
-	        // Validate the status code
-            ValidateStatusCode( iStatusCode );
-            }
-        break;
-        case THTTPEvent::EGotResponseBodyData:
-            {
-            // Part  of response's body data received. Use
-            // aTransaction.Response().Body()->GetNextDataPart() to get the actual
-            // body data.
-            // Get the body data supplier
-            IRLOG_INFO( "CIRHttpDataProvider::MHFRunL - THTTPEvent::EGotResponseBodyData" );
-            MHTTPDataSupplier *body = aTransaction.Response().Body();
-            TPtrC8 dataChunk;
-            body->GetNextDataPart( dataChunk );
-            iObserver.HttpBodyReceived( dataChunk );
-            // To release the body data.
-            body->ReleaseData();
-            }
-        break;
-        case THTTPEvent::ESucceeded:
-            {
-            IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--SUCCEEDED",KNullDesC);
-            // Transaction can be closed now. It's not needed anymore.
-            aTransaction.Close();
-            iRunning = EFalse;
-            iObserver.HttpEventComplete();
-            IRLOG_INFO( "CIRHttpDataProvider::MHFRunL - THTTPEvent::ESucceeded" );
-            }
-        break;
-        case THTTPEvent::EFailed:
-            {
-            IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--FAILED",KNullDesC);
-            // Transaction completed with failure.
-            aTransaction.Close();
-            iRunning = EFalse;
-            iObserver.HttpTransactionError( iStatusCode );
-            IRLOG_ERROR2( "CIRHttpDataProvider::MHFRunL - THTTPEvent::EFailed (status=%d)", iStatusCode );
-            }
-        break;
-       case THTTPEvent::ENotifyNewRequestBodyPart:
-            {
-            iLogMessage->ReleaseData();
-            }
-            break;
-        case KServiceUnavailable:
-	        {
-			IRRDEBUG2("MHFRunl:KServiceUnavailable",KNullDesC);
-			aTransaction.Close();
-            iRunning = EFalse;
-			iObserver.HttpTransactionError(KServiceUnavailable);
-	        }
-	        break;
-		case KDndTimedOut:      
-				{
-                IRRDEBUG2("MHFRunL :KDndTimedOut ",KNullDesC);
-      			// Just close the transaction on errors
-                aTransaction.Close();
-                iRunning = EFalse;
-				iObserver.HttpTransactionError(KDndTimedOut);	
-				}   
-				break;      
-        default:
-            // There are more events in THTTPEvent,
-            // Which is needed can be implemented incase required
-            // by the HTTP Data Provider
-                {
-                IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--DEFAULT",KNullDesC);
-                if ( aEvent.iStatus < 0 )
-                    {
-                    IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL %d",aEvent.iStatus);
-                    // Just close the transaction on errors
-                    aTransaction.Close();
-                    iRunning = EFalse;
-                    iObserver.HttpTransactionError( iStatusCode );
-                    }
-                // Other events are not errors
-				// (e.g. permanent and temporary redirections)
-				// ignore such errors
-                }
-            break;
-        }
-    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunL - Exiting." );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::MHFRunError()
-// Inherited from MHTTPTransactionCallback
-// Called by framework to pass transaction errors
-// ---------------------------------------------------------------------------
-//
-TInt CIRHttpDataProvider::MHFRunError( TInt /* aError*/,
-    RHTTPTransaction /*aTransaction*/, const THTTPEvent & /*aEvent*/ )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunError - Entering" );
-    IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNERROR",KNullDesC);
-    // Handle error and return KErrNone.
-    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunError - Exiting." );
-    return KErrNone;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::ExtractResponseHeadersL( RHTTPTransaction aTransaction )
-// Used to Extract the response headers.
-// ---------------------------------------------------------------------------
-//
-
-void CIRHttpDataProvider::ExtractResponseHeadersL(const RHTTPTransaction&
-	aTransaction )
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::ExtractResponseHeadersL - Entering" );
-    RHTTPResponse response = aTransaction.Response();
-    RHTTPHeaders respHeader = response.GetHeaderCollection();
-    THTTPHdrFieldIter iterator = respHeader.Fields();
-    RStringPool httpStringPool = aTransaction.Session().StringPool();
-    iterator.First();
-    HBufC8 *headerField = HBufC8::NewLC( KMaxHeaderNameLength +
-		KMaxHeaderValueLength );
-    HBufC8 *fieldValBuf = HBufC8::NewLC( KMaxHeaderValueLength );
-    while ( iterator.AtEnd() == EFalse )
-        {
-        RStringTokenF fieldName = iterator();
-        RStringF fieldNameStr = httpStringPool.StringF( fieldName );
-        THTTPHdrVal fieldVal;
-        if ( respHeader.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
-            {
-            const TDesC8 &fieldNameDesC = fieldNameStr.DesC();
-            headerField->Des().Copy( fieldNameDesC.Left(
-				KMaxHeaderNameLength ) );
-            fieldValBuf->Des().Zero();
-            switch ( fieldVal.Type() )
-                {
-                // the value is an integer
-                //lint restore -e747:Significant prototype
-                //coercion (arg. no. 1) int to long long  :
-                case THTTPHdrVal::KTIntVal: fieldValBuf->Des().Num(
-					fieldVal.Int() );
-                break;
-                // the value is a case-insensitive string
-                case THTTPHdrVal::KStrFVal:
-                    {
-                    RStringF fieldValStr = httpStringPool.StringF(
-						fieldVal.StrF() );
-                    const TDesC8 &fieldValDesC = fieldValStr.DesC();
-                    fieldValBuf->Des().Copy( fieldValDesC.Left(
-						KMaxHeaderValueLength ) );
-                    }
-                break;
-                // the value is a case-sensitive string
-                case THTTPHdrVal::KStrVal:
-                    {
-                    RString fieldValStr = httpStringPool.String(
-						fieldVal.Str() );
-                    const TDesC8 &fieldValDesC = fieldValStr.DesC();
-                    fieldValBuf->Des().Copy( fieldValDesC.Left(
-						KMaxHeaderValueLength ) );
-                    }
-                break;
-                // the value is a date/time
-                case THTTPHdrVal::KDateVal:
-                    {
-                    TDateTime date = fieldVal.DateTime();
-                    TTime t( date );
-                    if ( !iSetNonUAProfUserAgent )
-       					{
-       		            iObserver.HttpDateHeaderReceived( *headerField ,t );
-       					}
-                    }
-                break;
-                // the value is type is unknown
-                default:
-                    break;
-                }
-            // Display HTTP header field name and value
-            headerField->Des().Append( KDPColon );
-            headerField->Des().Append( *fieldValBuf );
-            iObserver.HttpHeaderReceived( *headerField );
-            }
-        ++iterator;
-        }
-    
-    CleanupStack::PopAndDestroy( fieldValBuf );
-    CleanupStack::PopAndDestroy( headerField );
-    IRLOG_DEBUG( "CIRHttpDataProvider::ExtractResponseHeadersL - Exiting." );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::SetHeaderL( RHTTPHeaders aHeaders, TInt aHeaderField,
-// const TDesC8& aHeaderValue )
-// Used to set the Http header
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::SetHeaderL( RHTTPHeaders aHeaders,
-    TInt aHeaderField, const TDesC8 &aHeaderValue ) const
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::SetHeaderL - Entering" );
-    RStringF valStr = iHttpSession.StringPool().OpenFStringL( aHeaderValue );
-    CleanupClosePushL( valStr );
-    THTTPHdrVal val( valStr );
-    aHeaders.SetFieldL( iHttpSession.StringPool().StringF( aHeaderField,
-		RHTTPSession::GetTable() ), val );
-    CleanupStack::PopAndDestroy( &valStr );
-    IRLOG_DEBUG( "CIRHttpDataProvider::SetHeaderL - Exiting." );
-    }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::BuildHeadersL(CIRHttpRequestData &aRequestInfo)
-//  Build the headers for the request
-// ---------------------------------------------------------------------------
-//
-
-void CIRHttpDataProvider::BuildHeadersL(const CIRHttpRequestData &aRequestInfo)
-    {
-    IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - Entering" );
-    RBuf logstr;
-    logstr.Create(KMaxSize);
-    logstr.CleanupClosePushL();
-     // Set headers for request; user agent and accepted content type
-    RHTTPHeaders header = iHttpTransaction.Request().GetHeaderCollection();
-
-     SetHeaderL( header, HTTP::EAccept, KAccept );
-     logstr.Copy(KAccept);
-    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAccept = %S", &logstr );
-
-       // Set the User-Agent header to UAProf string
-       SetHeaderL( header, HTTP::EUserAgent,
-		   iIRNetworkControllerHandle->GetUAProfString()->Des() );
-       logstr.Copy(iIRNetworkControllerHandle->GetUAProfString()->Des());
-    IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - HTTP::EUserAgent =");		   
-    TInt logstrLenth = logstr.Length();
-    TBuf<KLogbufferLenth> tempStr;
-    TInt index = 0;
-    while( logstrLenth > 0 )
-      {
-      if( logstrLenth > KLogbufferLenth )
-          {
-          tempStr.Copy( &logstr[index], KLogbufferLenth );
-          }
-      else
-          {
-          tempStr.Copy( &logstr[index], logstrLenth );
-          }
-      IRLOG_DEBUG2( "%S", &tempStr ); 
-      index += KLogbufferLenth;
-      logstrLenth -= KLogbufferLenth;
-      }  
-       // Set the Accept Character set header
-   SetHeaderL( header, HTTP::EAcceptCharset, KAcceptCharset );
-   logstr.Copy(KAcceptCharset);
-    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptCharset = %S", &logstr );
-
-    // Set the Accept-Language header as specified in aRequestInfo
-   if ( aRequestInfo.iAcceptLanguage.Length() != 0 )
-        {
-        SetHeaderL( header, HTTP::EAcceptLanguage,
-			aRequestInfo.iAcceptLanguage );
-        logstr.Copy(aRequestInfo.iAcceptLanguage);
-	    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptLanguage = %S", &logstr );
-        }
-    // If not specified then set the default accept language as "en"
-   else
-        {
-        SetHeaderL( header, HTTP::EAcceptLanguage, KAcceptLanguage );
-        logstr.Copy(KAcceptLanguage);
-        IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptLanguage = %S", &logstr );
-        }
-
-    // Add Accept-Encoding: gzip HTTP request header. The server will use compression to improve data
-	// transfer speed.
-    SetHeaderL( header, HTTP::EAcceptEncoding, KAcceptEncoding );
-    logstr.Copy(KAcceptEncoding);
-    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptEncoding = %S", &logstr );
-
-    // Set the If-Modified-Since header if required
-   if ( aRequestInfo.isIfModifiedSet )
-        {
-        THTTPHdrVal val( aRequestInfo.iIfModifiedSince );
-        header.SetFieldL( iHttpSession.StringPool().StringF(
-			HTTP::EIfModifiedSince, RHTTPSession::GetTable() ), val );
-        }
-
-    // Set the x-wap-profile header
-
-   TBuf8<KWapProfileMaxLength> xWapProfile;
-   _LIT(KXWapProfile,"x-wap-profile");
-   xWapProfile.Copy(KXWapProfile);
-   RStringF xWapProfileString  = iHttpSession.StringPool().OpenFStringL(
-	   xWapProfile  );
-   RStringF xWapProfileValueString  = iHttpSession.StringPool().OpenFStringL(
-	   iIRNetworkControllerHandle->GetWapProfString()->Des()  );
-   logstr.Copy(iIRNetworkControllerHandle->GetWapProfString()->Des());
-   IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - x-wap-profile =");   
-   logstrLenth = logstr.Length();
-   index = 0;
-   while( logstrLenth > 0 )
-      {
-      if( logstrLenth > KLogbufferLenth )
-          {
-          tempStr.Copy( &logstr[index], KLogbufferLenth );
-          }
-      else
-          {
-          tempStr.Copy( &logstr[index], logstrLenth );
-          }
-      IRLOG_DEBUG2( "%S", &tempStr ); 
-      index += KLogbufferLenth;
-      logstrLenth -= KLogbufferLenth;
-      }  
-   
-   THTTPHdrVal xWapProfileHeader(xWapProfileValueString  );
-   header.SetFieldL(xWapProfileString, xWapProfileHeader);
-   xWapProfileString.Close();
-   xWapProfileValueString.Close();
-   
-   
-   
-   
-   ////////////////////////////////////////////////////////////////////////////////
-   
-   //this piece of code is to get the MIME types supported by a device
-	TInt i,ii,j;
-    CMMFControllerPluginSelectionParameters *cs=CMMFControllerPluginSelectionParameters::NewLC();
-    CMMFFormatSelectionParameters * fs = CMMFFormatSelectionParameters::NewLC();
-    cs->SetRequiredPlayFormatSupportL(*fs);
-    cs->SetRequiredRecordFormatSupportL(*fs);
-    
-    RMMFControllerImplInfoArray controllers;
-    CleanupResetAndDestroyPushL(controllers);
-    cs->ListImplementationsL(controllers);
-    
-    TInt contrCount = controllers.Count();
-    RBuf8 audioMIMEs;
-    audioMIMEs.Create(KSize);
-    RBuf audioBuf;
-    audioBuf.Create(KBufSize);
-    _LIT(KAudio,"audio");
-    audioBuf.Copy(KAudio);
-    for(i=0;i<controllers.Count();i++)
-        {
-        if( KUidHelixController == controllers[i]->Uid() )
-            {
-        //supported play formats
-        const RMMFFormatImplInfoArray &pf=controllers[i]->PlayFormats();
-		TInt pfCount = pf.Count();
-        for(ii=0;ii<pf.Count();ii++)
-            {
-            RBuf z;
-            RBuf z1;
-            TBool first;
-            //file extensions
-            const CDesC8Array &fe=pf[ii]->SupportedFileExtensions();
-            first=TRUE;
-            z.CreateL(KSize);
-            z.CleanupClosePushL();
-            z1.CreateL(KSize);
-            z1.CleanupClosePushL();
-            z1.Zero();
-            for(j=0;j<fe.Count();j++)
-                {
-                _LIT(KNone,", ");
-                if(!first)z1.Append(KNone);
-                first=FALSE;
-                z.Copy(fe[j]);
-                z1.Append(z);
-                };
-            
-            //MIME types
-            const CDesC8Array &mt=pf[ii]->SupportedMimeTypes();
-            first=TRUE;
-            z1.Zero();
-            TInt tempD = 0;
-            for(j=0;j<mt.Count();j++)
-                {
-                z.Copy(mt[j]);
-                TInt res = z.Find(audioBuf);
-                if(res != KErrNotFound)
-	                {
-	                if(!first)
-		                {
-		                _LIT(KNone,", ");
-		                z1.Append(KNone);
-		                }
-                	first=FALSE;
-                	z1.Append(z);
-                	audioMIMEs.Append(z);
-                	if(j==mt.Count() && ii==pf.Count() && i==controllers.Count() )
-	                	{
-						//do nothing
-	                	}
-	                else 
-	                	{
-	                	_LIT(KComma,",");
-	                	audioMIMEs.Append(KComma);
-	                	}
-                	tempD++;	                	
-	                }
-                };
-            CleanupStack::PopAndDestroy(2);
-            };// for play formats
-            }
-   
-        };
-	audioBuf.Close();
-    CleanupStack::PopAndDestroy(1);//controllers
-    CleanupStack::PopAndDestroy(fs);
-    CleanupStack::PopAndDestroy(cs);
-	
-   
-  /////////////////////////////////////////////////////////////////////////////////  
-   
-   
-   
-   // Set the X-Nokia-iRAPP-Accept header
-
-   TBuf8<KNokiaIrAppAcceptMaxLength> xNokiaIrAppAccept;
-   _LIT(KXNokiaIrAppAccept,"X-Nokia-iRAPP-Accept");
-   xNokiaIrAppAccept.Copy(KXNokiaIrAppAccept);
-   RStringF xNokiaIrAppAcceptString  = iHttpSession.StringPool().OpenFStringL(
-	   xNokiaIrAppAccept  );
-   RStringF xNokiaIrAppAcceptValueString  = iHttpSession.StringPool().OpenFStringL(
-	    audioMIMEs );
-   logstr.Copy(audioMIMEs);
-   IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - X-Nokia-iRAPP-Accept =" );
-   logstrLenth = logstr.Length();
-   index = 0;
-   while( logstrLenth > 0 )
-      {
-      if( logstrLenth > KLogbufferLenth )
-          {
-          tempStr.Copy( &logstr[index], KLogbufferLenth );
-          }
-      else
-          {
-          tempStr.Copy( &logstr[index], logstrLenth );
-          }
-      IRLOG_DEBUG2( "%S", &tempStr ); 
-      index += KLogbufferLenth;
-      logstrLenth -= KLogbufferLenth;
-      }     
-   THTTPHdrVal xNokiaIrAppAcceptHeader(xNokiaIrAppAcceptValueString  );
-   header.SetFieldL(xNokiaIrAppAcceptString, xNokiaIrAppAcceptHeader);
-   xNokiaIrAppAcceptString.Close();
-   xNokiaIrAppAcceptValueString.Close();
-   
-   
-   audioMIMEs.Close();
-   
-   CleanupStack::PopAndDestroy(&logstr);
-   IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - Exiting." );
-   }
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::ValidateStatusCode(TInt aStatusCode)
-// Validate the status code returned
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::ValidateStatusCode( TInt aStatusCode )
-    { 
-    IRLOG_DEBUG( "CIRHttpDataProvider::ValidateStatusCode- Entering" );
-    // Callbacks will be provided as and when the call handling in UI is ready
-    switch ( aStatusCode )
-        {
-        case KOk:
-            {
-            }
-            break;
-
-        case KCreated:
-            {
-            }
-            break;
-
-        case KAccepted:
-            {
-            }
-            break;
-
-        case KNonAuthoritativeInformation:
-            {
-            }
-            break;
-
-        case KNoContent:
-            {
-            }
-            break;
-
-        case KResetContent:
-            {
-            }
-            break;
-
-        case KPartialContent:
-            {
-            }
-            break;
-
-            /*
-            Redirection 3xx status codes
-             */
-        case KMultipleChoices:
-            {
-            }
-            break;
-
-        case KMovedPermanently:
-            {
-            }
-            break;
-
-        case KFound:
-            {
-            }
-            break;
-
-        case KSeeOther:
-            {
-            }
-            break;
-
-        case KNotModified:
-                {
-                iNotModified = ETrue;
-                iObserver.HttpResponseCodeRecieved( KNotModified );
-                }
-            break;
-
-        case KUseProxy:
-            {
-            }
-            break;
-
-            /*
-            This status code is not used as per RFC 2616
-            const TInt KUnused = 306
-             */
-        case KTemporaryRedirect:
-            {
-            }
-            break;
-
-            /*
-            Client Error 4xx status codes
-             */
-        case KBadRequest:
-            {
-            }
-            break;
-
-        case KUnauthorized:
-            {
-            }
-            break;
-
-        case KPaymentRequired:
-            {
-            }
-            break;
-
-        case KForbidden:
-            {
-            }
-            break;
-
-        case KNotFound:
-                {
-                iObserver.HttpResponseCodeRecieved( KNotFound );
-                }
-            break;
-
-        case KMethodNotAllowed:
-            {
-            }
-            break;
-
-        case KNotAcceptable:
-            {
-            }
-            break;
-
-        case KProxyAuthenticationRequired:
-            {
-            }
-            break;
-
-        case KRequestTimeout:
-            {
-            }
-            break;
-
-        case KConflict:
-            {
-            }
-            break;
-
-        case KGone:
-            {
-            }
-            break;
-
-        case KLengthRequired:
-            {
-            }
-            break;
-
-        case KPreconditionFailed:
-            {
-            }
-            break;
-
-        case KRequestEntityTooLarge:
-            {
-            }
-            break;
-
-        case KRequestURITooLong:
-            {
-            }
-            break;
-
-        case KUnsupportedMediaType:
-            {
-            }
-            break;
-
-        case KRequestedRangeNotSatisfiable:
-            {
-            }
-            break;
-
-        case KExpectationFailed:
-            {
-            }
-            break;
-
-            /*
-            Server Error 5xx status codes
-             */
-        case KInternalServerError:
-            {
-            }
-            break;
-
-        case KNotImplemented:
-            {
-            }
-            break;
-
-        case KBadGateway:
-            {
-            }
-            break;
-
-        case KServiceUnavailable:
-            {
-            }
-            break;
-
-        case KGatewayTimeout:
-            {
-            }
-            break;
-
-        case KHTTPVersionNotSupported:
-            {
-            }
-            break;
-
-        default:
-        	break;
-
-    } // End of switch(aStatusCode)
-    IRLOG_DEBUG( "CIRHttpDataProvider::ValidateStatusCode - Exiting." );
-} // ValidateStatusCode(TInt aStatusCode)
-
-
-// ---------------------------------------------------------------------------
-// CIRHttpDataProvider::ReleaseResources()
-// Used to free all resources
-// ---------------------------------------------------------------------------
-//
-void CIRHttpDataProvider::ReleaseResources()
-	{
-	IRLOG_DEBUG( "CIRHttpDataProvider::ReleaseResources - Entering" );
-	iLogoDownloadEngine->ReleaseResources();
-	CancelTransaction();
-	iHttpSession.Close();
-    iFirstTime = ETrue;
-    IRLOG_DEBUG( "CIRHttpDataProvider::ReleaseResources - Exiting." );
-	}
-
-
-
-