ncdengine/engine/transport/src/catalogshttprequestadapter.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/transport/src/catalogshttprequestadapter.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2007-2008 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:   Implements CCatalogsHttpRequestAdapter
+*
+*/
+
+
+#include "catalogshttprequestadapter.h"
+
+#include "catalogshttprequestparser.h"
+#include "catalogshttpsession.h"
+#include "catalogshttpoperation.h"
+#include "catalogshttpobserver.h"
+#include "catalogshttpconfig.h"
+#include "catalogshttpheaders.h"
+
+#include "catalogsdebug.h"
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCatalogsHttpRequestAdapter* CCatalogsHttpRequestAdapter::NewL(
+    MCatalogsHttpSession& aHttpSession )
+    {
+    CCatalogsHttpRequestAdapter* self = new( ELeave ) 
+        CCatalogsHttpRequestAdapter( aHttpSession );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;    
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCatalogsHttpRequestAdapter::~CCatalogsHttpRequestAdapter()
+    {
+    DLTRACEIN((""));
+    delete iParser;
+    if ( iTransaction ) 
+        {
+        iTransaction->Release();
+        }
+    iHttpSession.Release();
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+MCatalogsHttpOperation* CCatalogsHttpRequestAdapter::CreateTransactionL(
+    const TDesC8& aUri,
+    const TDesC8& aRequest,
+    MCatalogsHttpObserver& aObserver )
+    {
+    DLTRACEIN((""));
+    iHttpObserver = &aObserver;
+    DASSERT( !iTransaction );
+    iUri.Set( aUri );
+    
+    // Request parsing leads to callbacks to ParsedHttpXXX methods which
+    // create the transaction to iTransaction
+    TRAPD( err, iParser->ParseRequestL( aRequest, *this ) );
+    
+    iHttpObserver = NULL;
+    if ( err != KErrNone ) 
+        {
+        DLERROR(("Error %d occurred, leaving", err ));
+        if ( iTransaction ) 
+            {
+            iTransaction->Release();
+            iTransaction = NULL;
+            }
+        User::Leave( err );
+        }
+    
+    if ( !iTransaction ) 
+        {
+        DLERROR(("Transaction creation failed"));
+        User::Leave( KErrCorrupt );
+        }
+        
+    MCatalogsHttpOperation* operation = iTransaction;
+    iTransaction = NULL;
+    
+    return operation;
+    }
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCatalogsHttpRequestAdapter::ParsedHttpRequestLineL( 
+    const TDesC8& aMethod, 
+    const TDesC8& aUri,
+    const TDesC8& aVersion )
+    {
+    DLTRACEIN(("Method: %S, URI: %S, version: %S",
+        &aMethod, &aUri, &aVersion ));
+    
+    DASSERT( iHttpObserver );
+    (void) aUri;
+    (void) aVersion;
+    
+    iTransaction = iHttpSession.CreateTransactionL( 
+        iUri, 
+        iHttpObserver );
+    
+    // Set the correct HTTP method
+    TCatalogsHttpMethod method( ECatalogsHttpPost );
+    
+    if ( aMethod.Compare( KCatalogsHttpGet ) == 0 ) 
+        {
+        method = ECatalogsHttpGet;
+        }
+    else if ( aMethod.Compare( KCatalogsHttpHead ) == 0 ) 
+        {
+        method = ECatalogsHttpHead;
+        }
+    
+    iTransaction->Config().SetHttpMethod( method );    
+    
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCatalogsHttpRequestAdapter::ParsedHttpHeaderL( 
+    const TDesC8& aHeader,
+    const TDesC8& aHeaderData )
+    {
+    DLTRACEIN(("Header: %S data: %S", &aHeader, &aHeaderData ));
+    DASSERT( iTransaction );
+    
+    // skip host, host header is generated by the platform
+    if ( aHeader.CompareF( KCatalogsHttpHeaderHost ) != 0 )
+        {
+        iTransaction->RequestHeadersL().AddHeaderL( aHeader, aHeaderData );        
+        }
+    }
+    
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCatalogsHttpRequestAdapter::ParsedHttpBodyL(
+    const TDesC8& aBody )
+    {
+    DLTRACEIN(("Body: %S", &aBody ));
+    DASSERT( iTransaction );
+    iTransaction->SetBodyL( aBody );
+    }
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCatalogsHttpRequestAdapter::CCatalogsHttpRequestAdapter( 
+    MCatalogsHttpSession& aHttpSession ) 
+    : iHttpSession( aHttpSession )
+    {
+    iHttpSession.AddRef();
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCatalogsHttpRequestAdapter::ConstructL()
+    {
+    DLTRACEIN((""));
+    iParser = CCatalogsHttpRequestParser::NewL();
+    }
+