uidesigner/com.nokia.sdt.series60.componentlibrary/components/non-layout/webclient/WebClientEngine.h
--- /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