browserutilities/feedsengine/FeedsServer/UrlHandler/inc/HttpHandler.h
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/feedsengine/FeedsServer/UrlHandler/inc/HttpHandler.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2005 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:  A class that fetches resources via HTTP 1.1.
+*
+*/
+
+
+#ifndef HTTP_HANDLER_H
+#define HTTP_HANDLER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <http/mhttptransactioncallback.h>
+#include <http/rhttpheaders.h>
+#include <http/rhttptransaction.h>
+
+#include "HttpConnection.h"
+#include "LeakTracker.h"
+#include "UrlHandler.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CTimer;
+class RHTTPSession;
+class RStringPool;
+
+// CLASS DECLARATION
+
+
+/**
+*  A class that fetches resources via HTTP 1.1.
+*
+*  \b Library: FeedsEngine.lib
+*
+*  @since 3.0
+*/
+class CHttpHandler: public CUrlHandler, public MHttpConnectionObserver,
+        public MHTTPTransactionCallback
+    {
+    public:  // Constructors and destructor
+        /**
+        * Two-phased constructor.
+        */
+        static CHttpHandler* NewL(CHttpConnection& aHttpConnection);
+        
+        /**
+        * Destructor.
+        */        
+        virtual ~CHttpHandler();
+        
+        
+    public:  // From CUrlHandler
+        /**
+        * Loads the given url -- asynchronously
+        *
+        * @since 3.0
+        * @param aUrl The url to load
+        * @param aObserver The load observer.
+        * @return void.
+        */
+        virtual void LoadUrlL(const TDesC& aUrl, MLoadObserver& aObserver);
+        
+
+      public:  // From MHttpConnectionObserver
+        /**
+        * Notifies the observer that the connection is available.
+        * 
+        * @since 3.0
+        * @return 
+        */
+        virtual void ConnectionAvailable(); 
+        
+        /**
+        * Notifies the observer that the establishment of the connection failed.
+        * 
+        * @since 3.0
+        * @param aStatus The reason for the failure.
+        * @return 
+        */
+        virtual void ConnectionFailed(TInt aStatus); 
+
+
+	  public: // From MHTTPTransactionCallback
+        /**
+        * Called when the filter's registration conditions are satisfied for events that
+        * occur on a transaction.
+        *
+        * @since 3.0
+        * @param aTransaction The transaction that the event has occurred on.
+        * @param aEvent The event that has occurred.
+        * @return void.
+        */
+        virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+
+        /**
+        * Called when RunL leaves from a transaction event. This works in the same
+        * way as CActve::RunError; return KErrNone if you have handled the error.
+        *
+        * @since 3.0
+        * @param aError The leave code that RunL left with.
+        * @param aTransaction The transaction that was being processed.
+        * @param aEvent The Event that was being processed.
+        * @return KErrNone if the error has been cancelled or the code
+        *         of the continuing error otherwise.
+        */
+        virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, 
+                const THTTPEvent& aEvent);
+        
+
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CHttpHandler(CHttpConnection& aHttpConnection);
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Cleanup stack callback method to release a DataSupplier.
+        *
+        * @since 3.0
+        * @param aPtr A libxml2 document ptr.
+        * @return void.
+        */
+        static void CleanupDataSupplier(TAny *aPtr);
+
+        /**
+        * Get the content-type and char-encoding from the response header.
+        *
+        * @since 3.0
+        * @param aContentType The content-type.
+        * @param aCharSet The char-encoding.
+        * @return void.
+        */       
+        void GetContentTypeL(TDesC*& aContentType, TDesC*& aCharSet);
+
+        /**
+        * Passes the status code and responseBody to the observer.  The observer
+        * adopts aResponseBody.
+        *
+        * @since 3.0
+        * @param aStatusCode The status code - normalized to the http response codes.
+        * @param aResponseBody The response body or NULL.
+        * @param aContentType The content-type.
+        * @param aCharSet The char-encoding.
+        * @return void.
+        */
+        void LoadCompleted(TInt aStatusCode, TDesC8* aResponseBody,
+                const TDesC& aContentType, const TDesC& aCharSet);
+
+        /**
+        * The timer's callback used to abort connections that stop responding.
+        *
+        * @since 3.0
+        * @param aPtr Holds the iTimerState pointer.
+        * @return An error code.
+        */       
+        static TInt TimerCallback(TAny* aPtr);
+
+
+    private:
+        const TTimeIntervalMicroSeconds32 KTimerPeriod;
+        
+        TLeakTracker      iLeakTracker;
+
+        CHttpConnection*  iHttpConnection;
+        TBool             iIsConnectionObserver;
+        RHTTPSession&     iSession;
+        RStringPool       iStringPool;
+        RHTTPTransaction  iTransaction;
+        RHTTPHeaders      iRespHeaders;
+        RHTTPHeaders	  iUserAgentHeader;
+
+        MLoadObserver*    iObserver;
+
+        HBufC8*           iResponseBuffer;
+
+        CPeriodic*        iTimer;
+        TCallBack         iTimerState;
+        TTime             iLastActivity;
+        TInt			  iStatusCode;
+    };
+
+#endif      // HTTP_HANDLER_H
+            
+// End of File
\ No newline at end of file