ncdengine/engine/transport/inc/catalogshttpstack.h
changeset 0 ba25891c3a9e
child 69 b18a4bf55ddb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/transport/inc/catalogshttpstack.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2006 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:  
+*
+*/
+
+
+#ifndef C_CATALOGSHTTPSTACK_H
+#define C_CATALOGSHTTPSTACK_H
+
+#include <http/mhttpdatasupplier.h>
+#include <http/mhttptransactioncallback.h>
+#include <http/mhttpauthenticationcallback.h>
+
+#include "catalogshttpstackobserver.h"
+#include "catalogskeyvaluepair.h"
+#include "catalogsconnectionmethod.h"
+
+
+// Constants
+const TInt KRequestTimeoutMicroseconds( 180000000 );
+
+// Forward declarations
+class RHTTPSession;
+class RHTTPTransaction;
+class CCatalogsHttpConnectionCreator;
+class CCatalogsHttpConnectionManager;
+class CCatalogsConnection;
+
+/**
+ * Symbian implementation of a HTTP stack.
+ */
+class CCatalogsHttpStack :   
+    public CActive,     
+    public MHTTPTransactionCallback,
+    public MHTTPDataSupplier,
+    public MHTTPAuthenticationCallback
+    {
+public:
+    
+    static CCatalogsHttpStack* NewL( 
+        MCatalogsHttpStackObserver* aObserver,
+        CCatalogsConnection& aConnection,
+        CCatalogsHttpConnectionCreator& aConnectionCreator );
+        
+    static CCatalogsHttpStack* NewLC( 
+        MCatalogsHttpStackObserver* aObserver,
+        CCatalogsConnection& aConnection,
+        CCatalogsHttpConnectionCreator& aConnectionCreator );
+        
+    virtual ~CCatalogsHttpStack();
+
+private:
+    
+    void ConstructL();
+    CCatalogsHttpStack( 
+        MCatalogsHttpStackObserver* iObserver,
+        CCatalogsConnection& aConnection,
+        CCatalogsHttpConnectionCreator& aConnectionCreator );
+
+    void SetHeaderL( RHTTPHeaders aHeaders, 
+                     TInt aHdrField, 
+                     const TDesC8& aHdrValue);
+
+
+public:     
+
+    void ClearHeaders();
+    
+    void AddHeaderL( const CCatalogsKeyValuePair* aPair );
+
+    void IssueHttpRequestL( const TDesC8& aMethod,
+                            const TDesC8& aURI,
+                            const TDesC8& aContentType,
+                            const TDesC8& aBody );
+
+    void CancelTransaction();
+    
+    void ReleaseBody();    
+    
+
+    void SetConnectionMethodL( const TCatalogsConnectionMethod& aMethod );
+    
+    /** 
+     * Real accesspoint id if connected     
+     */
+    TUint32 AccessPointID() const;
+    
+    void SetObserver( MCatalogsHttpStackObserver* aObserver );
+
+    
+    /**
+     * @param aManager Connection manager. Ownership is NOT transferred
+     */
+    void SetConnectionManager( CCatalogsHttpConnectionManager* aManager );
+
+private:
+
+    void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+    TInt MHFRunError( TInt aError, 
+                      RHTTPTransaction aTransaction, 
+                      const THTTPEvent& aEvent );
+
+private:
+    
+    void ReleaseData();
+    TBool GetNextDataPart( TPtrC8& aDataPart );
+    TInt Reset();
+    TInt OverallDataSize();    
+
+    void SetTimeoutTimer();
+    void CancelTimeoutTimer();
+
+private:
+    
+    TBool GetCredentialsL( const TUriC8& aURI, 
+                           RString aRealm, 
+                           RStringF aAuthenticationType, 
+                           RString& aUsername, 
+                           RString& aPassword );
+
+private:
+
+    void RunL();
+    void DoCancel();
+
+private:
+
+    enum
+        {
+        ENone,
+        ETimeout
+        } iState;
+
+    RTimer                  iTimer;        
+    
+    RHTTPSession            iSession;
+    RHTTPTransaction        iTransaction;
+    
+    RPointerArray<CCatalogsKeyValuePair> iUserHeaders;
+
+    TBool                   iConnected;
+    TCatalogsConnectionMethod iConnectionMethod;    
+
+    
+    TInt                    iLastError;
+
+    RStringPool             iPool;
+    TStringTable const&     iTable;
+
+    MHTTPDataSupplier*      iBody;
+
+    MCatalogsHttpStackObserver*  iObserver;  // Used for passing body data and
+                                        // events to the client.
+    HBufC8*                 iPostData;  // Data for HTTP requests
+    TBool                   iRunning;   // ETrue, if transaction running
+
+    CCatalogsConnection&    iConnection; 
+    CCatalogsHttpConnectionCreator& iConnectionCreator;
+    TBool                   iConnectionOpened; // ETrue if iConnection is open
+    CCatalogsHttpConnectionManager* iConnectionManager; // not owned
+    
+    };
+
+#endif // C_CATALOGSHTTPSTACK_H