uidesigner/com.nokia.sdt.series60.componentlibrary/components/non-layout/webclient/WebClientEngine.h
changeset 0 fb279309251b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.sdt.series60.componentlibrary/components/non-layout/webclient/WebClientEngine.h	Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 WEBCLIENTENGINE_H
+#define WEBCLIENTENGINE_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <http.h>
+#include <http/mhttpauthenticationcallback.h>
+#include <es_sock.h>
+
+// CONSTANTS
+const TInt KMaxHeaderNameLength     = 32;
+const TInt KMaxHeaderValueLength    = 128;
+const TInt KMaxAuthTypeLength       = 128;
+const TInt KMaxDateTimeStringLength = 40;
+const TInt KMaxStatusTextLength     = 32;
+const TInt KMaxUserNameLength       = 128;
+const TInt KMaxPasswordLength       = 128;
+
+// Used user agent for requests
+_LIT8( KUserAgent, "WebClient 1.0" );
+
+// This client accepts all content types.
+// (change to e.g. "text/plain" for plain text only)
+_LIT8( KAccept, "*/*" );
+
+// Format for output of data/time values
+_LIT( KDateFormat,"%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
+
+// Some texts for header output
+_LIT( KColon, ": " );
+_LIT( Krealm, "Realm: " );
+
+class CWebClientEngine;
+
+// CLASS DECLARATION
+
+/**
+* MWebClientObserver
+* CWebClientEngine passes events and responses body data with this interface. 
+* An instance of this class must be provided for construction of CWebClientEngine.
+*/
+class MWebClientObserver 
+    {
+    public:
+    	/**
+    	 * ClientOpenSessionFailedL( CWebClientEngine& anEngine )
+    	 * An error occurred opening the HTTP session. The calling code
+    	 * will leave after this method returns.
+    	 * @param anError: the error code
+    	 * Most common error; no access point configured, and session creation
+         * leaves with KErrNotFound.
+    	 */
+    	virtual void ClientOpenSessionFailedL( CWebClientEngine& anEngine, TInt anError ) = 0;
+ 		/**
+         * ClientConnectingL()
+         * Called to notify that a connection was initiated
+         */
+        virtual void ClientConnectingL( CWebClientEngine& anEngine ) = 0;
+ 
+		/**
+        * ClientHeaderReceivedL()
+        * Called when HTTP header is received.
+        * @param aHeaderData: Header field name and value
+        */
+        virtual void ClientHeaderReceivedL( CWebClientEngine& anEngine, const TDesC& aHeaderData ) = 0;
+
+ 		/**
+        * ClientBodyReceivedL()
+        * Called when a part of the HTTP body is received.
+        * @param aBodyData:  Part of the body data received. (e.g. part of
+        *                    the received HTML page)
+        */
+        virtual void ClientBodyReceivedL( CWebClientEngine& anEngine, const TDesC8& aBodyData ) = 0;
+               
+ 		/**
+         * ClientConnectionCanceledL()
+         * Called to notify that a connection attempt has been canceled
+         */
+        virtual void ClientConnectionCanceledL( CWebClientEngine& anEngine ) = 0;
+        
+ 		/**
+         * ClientResponseCompleteL
+         * Called to notify that a transaction's response is complete.
+         * See TTransactionEvent::EResponseComplete
+         */
+        virtual void ClientResponseCompleteL( CWebClientEngine& anEngine ) = 0;
+        
+ 		/**
+         * ClientTransactionSucceeded()
+         * Called to notify that a transaction completed successfully
+         * See TTransactionEvent::ESucceeded
+         */
+        virtual void ClientTransactionSucceededL( CWebClientEngine& anEngine ) = 0;
+        
+ 		/** 
+         * ClientTransactionFailed()
+         * Catch-all for failure. 
+         * See TTransactionEvent::EFailed
+         */
+         virtual void ClientTransactionFailedL( CWebClientEngine& anEngine ) = 0;
+         
+  		/**
+          * ClientUnknownEventL()
+          * Called to notify that an unknown HTTP event has
+          * been received.
+          * @param aStatus: the iStatus field of the event
+          * See THTTPEvent::iStatus
+          */
+         virtual void ClientUnknownEventL( CWebClientEngine& anEngine , TInt aStatus ) = 0;
+        
+ 		/**
+         * ClientRunErrorL()
+         * Called when a error occurs in the handling of a transaction event.
+         * @param anError: the error code
+         */
+        virtual void ClientRunErrorL( CWebClientEngine& anEngine , TInt anError) = 0;
+        
+ 		/**
+         * ClientGetCredentialsL()
+         * Called when authentication has been requested by the server.
+         * Return EFalse for no authentication or e.g. the user cancels
+         * an input dialog. Otherwise return the user name and password 
+         * as out parameters along with an ETrue result.
+         * @param aUri: the current URI
+         * @param aRealm: the realm associated with the request
+         * @param aUserName: the returned user name
+         * @param aPassword: the returned password
+         */
+        virtual TBool ClientGetCredentialsL( CWebClientEngine& anEngine, const TUriC8& aUri, 
+                                const TDesC8& aRealm, 
+                                TDes& aUsername, 
+                                TDes& aPassword ) = 0;
+        
+    };
+
+/**
+* CWebClientEngine
+* Provides simple interface to HTTP Client API.
+*/
+class CWebClientEngine : public CBase, 
+                         public MHTTPTransactionCallback,
+                         public MHTTPAuthenticationCallback
+    {
+    public:
+ 		/**
+        * NewL()
+        * Create a CWebClientEngine object.
+        * @param  iObserver: 
+        * @return A pointer to the created instance of CWebClientEngine
+        */
+        static CWebClientEngine* NewL( MWebClientObserver& aObserver );
+
+ 		/**
+        * NewLC()
+        * Create a CWebClientEngine object.
+        * @param  iObserver:
+        * @return A pointer to the created instance of CWebClientEngine
+        */
+        static CWebClientEngine* NewLC( MWebClientObserver& aObserver );
+
+ 		/**
+        * ~CWebClientEngine()
+        * Destroy the object
+        */
+        ~CWebClientEngine();
+        
+ 		/**
+         * Opens the HTTP session. Automatically called when a session is initiated,
+         * or can be called separately.
+         */
+        void OpenSessionL();
+
+ 		/**
+        * IssueHTTPGetL()
+        * Starts a new HTTP GET transaction.
+        * @param aUri: URI to get. (e.g. http://host.org")
+        */
+        void IssueHTTPGetL( const TDesC8& aUri );
+
+ 		/**
+        * CancelTransactionL()
+        * Closes currently running transaction and frees resources related to it.
+        */
+        void CancelTransactionL();
+
+ 		/**
+        * IsRunning()
+        * Checks if the transaction is running.
+        * @return ETrue, if transaction is currently running.
+        */
+        inline TBool IsRunning() { return iRunning; };
+
+    private:
+ 		/**
+        * ConstructL()
+        * Perform the second phase construction of a CWebClientEngine object.
+        */
+        void ConstructL();
+
+ 		/**
+        * CWebClientEngine()
+        * Perform the first phase of two phase construction.
+        * @param iObserver: 
+        */
+        CWebClientEngine( MWebClientObserver& iObserver );
+
+ 		/**
+        * SetHeaderL()
+        * Sets header value of an HTTP request.
+        * @param aHeaders:  Headers of the HTTP request
+        * @param aHdrField: Enumerated HTTP header field, e.g. HTTP::EUserAgent
+        * @param aHdrValue: New value for header field
+        */
+        void SetHeaderL( RHTTPHeaders aHeaders, TInt aHdrField, 
+                         const TDesC8& aHdrValue );
+
+ 		/**
+        * DumpRespHeadersL()
+        * Called when HTTP header is received.
+        * Displays HTTP header field names and values
+        * @param aTransaction: The transaction that is processed.
+        */
+        void DumpRespHeadersL( RHTTPTransaction& aTransantion );
+
+ 		/**
+        * HandleRunErrorL()
+        * Called from MHFRunError() when *leave* occurs in handling of transaction event. 
+        * @param aError:       The leave code that occured.
+        */
+        void HandleRunErrorL( TInt aError );
+
+    /**
+    * From MHTTPSessionEventCallback
+    */
+    private:
+ 		/**
+        * MHFRunL()
+        * Called by framework to notify about transaction events.
+        * @param aTransaction: Transaction, where the event occured.
+        * @param aEvent:       Occured event.
+        */
+        void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+ 		/**
+        * MHFRunError()
+        * Called by framework when *leave* occurs in handling of transaction event. 
+        * @param aError:       The leave code that occured.
+        * @param aTransaction: The transaction that was being processed when leave occured.
+        * @param aEvent:       The event that was being processed when leave occured.
+        * @return KErrNone,    if the error was handled. Otherwise the value of aError, or
+        *                      some other error value. Returning error value causes causes 
+        *                      HTTP-CORE 6 panic.
+        */
+        TInt MHFRunError( TInt aError, 
+                          RHTTPTransaction aTransaction, 
+                          const THTTPEvent& aEvent );
+
+    /**
+    * From MHTTPAuthenticationCallback (needed for HTTP authentication)
+    */
+    private:
+ 		/**
+        * GetCredentialsL()
+        * Called by framework when username and password for requested URI is 
+        * needed.
+        * @param aURI: The URI being requested (e.g. "http://host.org")
+        * @param aRealm: The realm being requested (e.g. "user@host.org")
+        * @param aAuthenticationType: Authentication type. (e.g. "Basic")
+        * @param aUsername: Given user name.
+        * @param aPassword: Given password.
+        * @return A pointer to the created document
+        */
+        TBool GetCredentialsL(  const TUriC8& aUri, 
+                                RString aRealm, 
+                                RStringF aAuthenticationType, 
+                                RString& aUsername, 
+                                RString& aPassword );
+                                
+    private: // Data
+        RHTTPSession            iSession;
+        RHTTPTransaction        iTransaction;
+        RSocketServ 			iSocketServ;
+		RConnection 			iConnection;
+        
+        MWebClientObserver&     iObserver;      // Used for passing body data and
+                                                // events to UI.
+        TBool					iSessionOpened; // ETrue, if session successfully opened
+        TBool                   iRunning;       // ETrue, if transaction running
+    };
+
+#endif // WEBCLIENTENGINE_H