--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.h Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002 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: Declaration of CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_H
+#define PUSHMTMFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <e32base.h>
+#include <http.h>
+#include <stringpool.h>
+#include <apmstd.h>
+#include <es_sock.h>
+#include "HttpCacheManager.h"
+#include "PushMtmCacheSupply.h"
+
+// FORWARD DECLARATIONS
+
+class CMsvEntry;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that downloads the service indicated by an SL
+* pushed service message.
+*
+* The operation can run in silent mode without requiring any user intervention.
+*/
+class CPushMtmFetchOperation : public CActive,
+ public MHTTPTransactionCallback,
+ public MCacheSupplyCallbacks
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aRequestedUrl The requested URL.
+ * @param aObserverRequestStatus Observer's status.
+ * @return The constructed operation.
+ */
+ static CPushMtmFetchOperation* NewL
+ (
+ const TDesC& aRequestedUrl,
+ TRequestStatus& aObserverRequestStatus
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmFetchOperation();
+
+ public: // Functions from base classes
+
+ /**
+ * Start or restart the operation.
+ */
+ void StartL();
+
+ RHTTPTransaction* Transaction(){ return &iHttpTrans; }
+ void HandleEventL(THTTPEvent aEvent) { MHFRunL(iHttpTrans, aEvent); }
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aObserverRequestStatus Observer's status.
+ */
+ CPushMtmFetchOperation( TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Second phase constructor.
+ * @param aRequestedUrl The requested URL.
+ * @return None.
+ */
+ void ConstructL( const TDesC& aRequestedUrl );
+
+ protected: // New functions
+
+ /**
+ * Get the ID of the defauld internet access point set in the Browser
+ * Preferences that is used for connection creation.
+ * @param aIapId The ID of the access point, if found. The value of
+ * this variable is not changed if no default ap can be found.
+ * @return Indicate if default ap could be found.
+ */
+ TBool GetDefaultInetAccessPointL( TUint32& aIapId ) const;
+
+ protected: // state machine parts
+
+ /**
+ * Initiate connecting.
+ */
+ void InitializeL();
+
+ /**
+ * StartRequestL
+ */
+ void StartRequestL();
+
+ /**
+ * CheckCacheL
+ */
+ void CheckCacheL();
+
+ /**
+ * Initiate connecting.
+ */
+ void RequestL();
+
+ /**
+ * Clean up and notify parent.
+ */
+ void Done();
+
+ /**
+ * Create transaction, set request headers (and body for POST request).
+ */
+ void CreateTransactionL();
+
+ /**
+ * Submit the transaction (make the HTTP request).
+ */
+ void SubmitTransactionL();
+
+ /**
+ * Handle response from server.
+ * @param aResponse Response from server.
+ */
+ void HandleResponseHeadersL( RHTTPResponse aResponse );
+
+ /**
+ * HTTP Version Not Supported. Resubmit transaction using HTTP/1.0.
+ * @return ETrue if transaction was resubmitted, EFalse if not (i.e
+ * we already use HTTP/1.0).
+ */
+ TBool VersionRetryL();
+
+ /**
+ * Append a new chunk of response data to the reponse buffer.
+ * @return KErrNone or KErrNoMemory.
+ */
+ TInt AppendResponse( const TDesC8& aDataChunk );
+
+ protected: // helpers
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const TDesC8& aHdrValue
+ );
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ HTTP::TStrings aHdrValue
+ );
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const RStringF aHdrValue
+ );
+
+ /**
+ * Helper function to get the Content-Type header value.
+ * @param aHeaders HTTP header set.
+ * @return Content-Type header value.
+ */
+ const TDesC8& GetContentTypeL( RHTTPHeaders aHeaders );
+
+ /**
+ * Helper function to get the source URI of a transaction.
+ * @param aTransaction Transaction.
+ * @return Source URI.
+ */
+ const TDesC8& GetSourceUriL( RHTTPTransaction aTransaction );
+
+ /**
+ * Get a shared string from the session stringpool.
+ * @param aId Id of string.
+ * @return Shared string from HTTP string table. No need to close.
+ */
+ inline RStringF StringF( HTTP::TStrings aId );
+
+ protected: // debug utilities
+
+ /**
+ * In debug build, log headers. In release build, do nothing.
+ * @param aHeaders Headers to log.
+ */
+ void LogHeadersL( RHTTPHeaders aHeaders );
+
+ protected: // Functions from base classes
+
+ /**
+ * Cancel fetching.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Start fetching and make an entry into the operation mapper.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // from MHTTPTransactionCallback
+
+ /**
+ * Handle transaction event.
+ * @param aTransaction The transaction that the event has occurred on.
+ * @param aEvent The event that has occurred.
+ */
+ void MHFRunL( RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ /**
+ * Handle errors occured in MHFRunL().
+ * @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.
+ */
+ TInt MHFRunError( TInt aError,
+ RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ protected: // Data
+
+ TRequestStatus& iObserver; ///< Observer's status.
+ HBufC8* iRequestedUrl; ///< Request URI or NULL. Owned.
+
+ enum TState ///< State.
+ {
+ EInit, ///< Initial state.
+ EStartRequest, ///< Create HTTP session & request
+ ECheckCache, ///< Check if content is in cache
+ ERequest, ///< HTTP request.
+ EDone
+ };
+
+ TState iState; ///< Current state.
+ TInt iResult; ///< Resulting error code.
+
+ RSocketServ iSockServ; ///< Socket Server session handle.
+ RConnection iConn; ///< Connection handle.
+
+ CHttpCacheManager* iCacheMgr;///< Cache Manager. Owned.
+
+ RHTTPSession iHttpSess; ///< HTTP session. Owned.
+ RHTTPTransaction iHttpTrans;///< Transaction. Owned.
+
+ HBufC8* iSourceUri; ///< Source URI. Owned.
+ HBufC8* iBody; ///< Response body. Owned.
+ TDataType iDataType; ///< Data type.
+ THttpCacheEntry iCacheEntry;///< Holds the cache entry
+ CPushMtmCacheSupply* iCacheSupply;
+ TBool iCachedResponse;
+ };
+
+#include "PushMtmFetchOperation.inl"
+
+#endif // PUSHMTMFETCHOPERATION_H
+
+// End of file.