locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodehttpclientengine.h
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodehttpclientengine.h	Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2010 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: Declaration of HTTP client engine class.
+*
+*/
+
+#ifndef POSREVGEOCODEHTTPCLIENTENGINE_H
+#define POSREVGEOCODEHTTPCLIENTENGINE_H
+
+#include <http/mhttptransactioncallback.h>
+#include <http/mhttpauthenticationcallback.h>
+#include <es_sock.h>
+#include <cmmanager.h>
+#include <comms-infras/cs_mobility_apiext.h>
+
+
+
+class RHTTPSession;
+class RHTTPTransaction;
+
+const TInt KDefaultBufferSize = 256;
+
+/*
+ *  Enumration for the different states of HTTP GET request.
+ */
+enum THttpStatus
+    {
+    EHttpSessionError =0,
+    EHttpExitingApp,
+    EHttpConnecting,
+    EHttpTxCancelled,
+    EHttpHdrReceived,
+    EHttpBytesReceieved,
+    EHttpBodyReceieved,
+    EHttpTxCompleted,
+    EHttpTxSuccess,
+    EHttpTxFailed,
+    EHttpConnectionFailure,
+    EHttpUnknownEvent,
+    EHttpMhfRunError,
+    EHttpAuthNote,
+    EHttpAuthFailed,
+    EHttpAuthRequired,
+    };
+
+enum TMobileRoamingStatus
+    {
+    EMobileNotRegistered = 0x00,
+    EMobileRegHomeNetwork, // home network
+    EMobileNationalRoaming,
+    EMobileInternationalRoaming
+    };
+
+/**
+ * MClientObserver
+ * CPosRevGeoCodeHTTPClientEngine passes events and responses body data with this interface.
+ * An instance of this class must be provided for construction of CPosRevGeoCodeHTTPClientEngine.
+ */
+class MPosRevGeoCodeHTTPClientObserver
+    {
+    public:
+    /*
+    * ClientEvent()
+    *
+    * Called when event occurs in CClientEngine.
+    *
+    * @params aEvent Status of the event.
+    */
+    virtual void ClientEvent( const THttpStatus& aEvent ) = 0;
+    
+    /*
+    * ClientBodyReceived()
+    *
+    * 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 ClientBodyReceived( const TDesC8& aBodyData ) = 0;
+    };
+
+
+/*
+ * This class provides interface to HTTP client APIs
+ */
+class CPosRevGeoCodeHTTPClientEngine: public CActive,
+                                      public MHTTPTransactionCallback,
+                                      public MMobilityProtocolResp
+    {
+    /**
+     * Internal Engine state 
+     */
+    enum TEngineState
+        {
+        EIdle = 0,
+        EGet
+        };
+public:
+    /**
+     * Factory method which creates instance of CPosRevGeoCodeHTTPClientEngine object.
+     */
+    static CPosRevGeoCodeHTTPClientEngine* NewL( MPosRevGeoCodeHTTPClientObserver& iObserver );
+
+    /**
+     * Destructor
+     */
+    ~CPosRevGeoCodeHTTPClientEngine();
+
+    /**
+     * Starts a new HTTP GET transaction.
+     *
+     * @param aUri URI to get request. (e.g. http://host.org")
+     */
+    void IssueHTTPGetL( const TDesC8& aUri );
+
+    /**
+     * Closes currently running transaction and frees resources related to it.
+     */
+    void CancelTransaction();
+    
+    /**
+     * Closes the connection
+     */
+    void CloseConnection();
+    
+private:
+    /*
+     * Symbian 2nd phase constructor
+     */
+    void ConstructL();
+
+    /*
+     * Constructor
+     */
+    CPosRevGeoCodeHTTPClientEngine( MPosRevGeoCodeHTTPClientObserver& iObserver );
+
+    /**
+     * Sets header value of an HTTP request.
+     */
+    void SetHeaderL( RHTTPHeaders aHeaders, TInt aHdrField,
+                     const TDesC8& aHdrValue );
+
+    /**
+     * Sets up the connection
+     */
+    void SetupConnectionL();
+
+private: //From MHTTPSessionEventCallback
+
+    void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+    TInt MHFRunError( TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+private:// From MMobilityProtocolResp
+    void PreferredCarrierAvailable( TAccessPointInfo aOldAPInfo,
+                                    TAccessPointInfo aNewAPInfo,
+                                    TBool aIsUpgrade,
+                                    TBool aIsSeamless );
+    
+    void NewCarrierActive( TAccessPointInfo aNewAPInfo, TBool aIsSeamless );
+    
+    void Error( TInt aError );
+
+private: // from CActive
+    void RunL();
+    void DoCancel();
+    TInt RunError(TInt aError);
+
+private:
+    void DoHTTPGetL();
+    
+private: // Data members
+    RSocketServ                 iSocketServ;
+    RConnection                 iConnection;
+    TUint32                     iSelectedIap;
+
+    RHTTPSession                iSession;
+    RHTTPTransaction            iTransaction;
+
+    MPosRevGeoCodeHTTPClientObserver&            iObserver;  // Used for passing body data and events to UI
+    TBool                       iRunning;   // ETrue, if transaction running
+    TBool                       iConnectionSetupDone;
+    
+    TInt                        iPrevProfileId;
+    
+    CActiveCommsMobilityApiExt* iMobility;
+    TBool                       iTransactionOpen;
+    TEngineState                 iEngineState;
+    HBufC8*                     iUri;
+    RCmManager                  iCmManager;
+    };
+#endif /* POSREVGEOCODEHTTPCLIENTENGINE_H */