--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/IMPSengine/ImpsDataChannel/inc/HttpTransportAdapter.h Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 2003 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: Adapter for Http transport.
+*
+*
+*/
+
+
+#ifndef HTTPTRANSPORTADAPTER_H
+#define HTTPTRANSPORTADAPTER_H
+
+// INCLUDES
+#include <f32file.h>
+//HTTP Stack
+#include <http.h>
+//Bearer observer
+#include <msgbearerobscallback.h>
+//IMPS Sender interface
+#include "ImpsDataChannelAPI.h"
+//Internal headers
+#include "ImpsTransportTimer.h"
+
+//COMMON CONSTANTS
+_LIT( KLogDir, "ImpsDataChannel" );
+_LIT( KTransportLogFile, "ImpsDataChannel.txt" );
+const TInt KLogBufferMaxSize = 2000;
+_LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
+const TInt KMaxSubmitSize = 1024;
+const TInt KMaxHeaderNameLen = 32;
+const TInt KMaxHeaderValueLen = 128;
+const TInt KBufferMaxSize = 2048;
+
+
+
+//FORWARD DECLARATIONs
+class CImpsHttpTransaction;
+class MImpsReceiver;
+
+// CLASS DECLARATION
+class CHttpTransportAdapter : public CBase,
+ public MImpsSender,
+ public MMsgBearerObsCallback,
+ public MHTTPTransactionCallback,
+ public MImpsTransportTimerCallback
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Symbian OS default constructor.
+ * @param aSession A reference to an opened file session
+ * @param aMimeType MIME type of the messages to be sent
+ * @param aReceiver The receiving object
+ * @return CHttpTransportAdapter
+ */
+ static CHttpTransportAdapter* NewL( MImpsDataReceiver& aReceiver,
+ MMsgConnManager& aConnManager,
+ const TDesC8& aMimeType );
+
+ /**
+ * Opens a connection to IMPS server
+ * @param aId ID of the request
+ * @param aLog Is logging enabled or not
+ * @param aProxy Shall we connect through a proxy server?
+ * @param aSAP The address of the remote host
+ * @param aIAP The ID of the access point to use
+ */
+ virtual void OpenL( const TDesC& aSAP );
+
+ /**
+ * Closes connection to WV server.
+ * @return TInt
+ */
+ virtual void Close();
+
+ /**
+ * Send one IMPS message.
+ * @param aId Transaction ID
+ * @param aMessage Message to be sent
+ * @param aExpiryTime The time period after which the message expires
+ */
+ virtual void SendL( const TInt aId,
+ const TDesC8& aMessage,
+ const TInt aExpiryTime = 0 );
+
+ /**
+ * Cancel the sending of all pending requests.
+ * Obviously, the transactions cannot be "sucked back",
+ * but they can be closed so that the responses never
+ * reach the client application
+ */
+ virtual void CancelAll();
+
+ /**
+ * Cancel the sending of a named transaction.
+ * Obviously, the transaction cannot be "sucked back",
+ * but it can be closed so that the response never
+ * reaches the client application
+ */
+ virtual void CancelTransaction( const TInt aTID );
+
+ /**
+ * Return the number of pending requests.
+ * @return TInt
+ */
+ inline virtual TInt PendingRequests() const;
+
+ /**
+ * Destructor, which makes the C++ destructor "visible" to users
+ * of the MImpsSender interface. This function simply says "delete this".
+ */
+ inline virtual void Destroy();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CHttpTransportAdapter();
+
+ public: //New functions
+
+ /**
+ * Returns the MIME type of the messages
+ * @return TPtrC8 The MIME type of the messages
+ */
+ inline TPtrC8 MimeType() const;
+
+ /**
+ * Returns the address of the default SAP
+ * @return TUriParser The default SAP
+ */
+ inline TUriParser8 DefaultSAP() const;
+
+ /**
+ * Returns a reference to the currently active HTTP session
+ * NOTE: Causes a panic if the session is closed.
+ * @return RHTTPSession The currently active HTTP session
+ */
+ inline RHTTPSession& HttpSession();
+
+ /**
+ * Returns a reference to the receiver object
+ * @return MImpsDataReceiver The current data receiver
+ */
+ inline MImpsDataReceiver& ReceiverHandle() const;
+
+ /**
+ * Check whether the HTTP session has been closed
+ * @return TBool
+ */
+ inline TBool SessionClosed() const;
+
+#ifdef _DEBUG
+
+ /**
+ * A global logging function for 16 bit data.
+ * @param aCommand command to be handled
+ */
+ static void WriteToLog( TRefByValue<const TDesC> aFmt, ... );
+
+ /**
+ * A global logging function for 8 bit data.
+ * @param aCommand command to be handled
+ */
+ static void WriteToLog( TRefByValue<const TDesC8> aFmt, ... );
+
+#endif
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CHttpTransportAdapter( MImpsDataReceiver& aReceiver,
+ MMsgConnManager& aConnManager );
+
+ /**
+ * Symbian OS default constructor.
+ * @param aMimeType MIME type of the messages
+ */
+ void ConstructL( const TDesC8& aMimeType );
+
+ /**
+ * Initialises an HTTP session
+ */
+ void InitialiseSessionL();
+
+ /**
+ * Writes data to the input buffer
+ * @param TDesC8& aBodyData
+ */
+ void WriteDataToInputBufferL( const TDesC8& aBodyData );
+
+ /**
+ * Stores the address of the proxy currently in use
+ * @param aProxy Address of the HTTP proxy server
+ */
+ void SetProxyL();
+
+ /**
+ * Stores the address of the proxy currently in use
+ * @param aProxy Address of the HTTP proxy server
+ */
+ void HandleBearerEventL( TBool aIsAuthClose, TMsgBearerEvent aBearerEvent );
+
+ /**
+ * Stores the address of the proxy currently in use
+ * @param aProxy Address of the HTTP proxy server
+ */
+ void HandleTemporaryRedirectionL( RHTTPTransaction aTransaction );
+
+ /**
+ * Stores the address of the proxy currently in use
+ * @param aProxy Address of the HTTP proxy server
+ */
+ void HandlePermanentRedirectionL( RHTTPTransaction aTransaction );
+
+ /**
+ * Stores the address of the SAP currently in use
+ * @param aURL Address of the remote host
+ */
+ void SetUrlL( const TDesC& aURL );
+
+ /**
+ * Sets the MIME type of the messages
+ * @param aMimeType MIME type of the messages
+ */
+ void SetMimeTypeL( const TDesC8& aMimeType );
+
+ /**
+ * Map an HTTP request to the corresponding IMPS request
+ * @param aTransaction HTTP Transaction
+ * @return CImpsHttpTransaction
+ */
+ CImpsHttpTransaction* ImpsTransaction( const RHTTPTransaction& aTransaction );
+
+ /**
+ * Returns the Content-Length header, if specified
+ * @param aResponse HTTP response
+ * @return TInt
+ */
+ TInt ContentLengthL( RHTTPResponse aResponse ) const;
+
+ /**
+ * Returns the Content-Length header, if specified
+ * @param aResponse HTTP response
+ * @return TInt
+ */
+ TPtrC8 LocationL( RHTTPResponse aResponse ) const;
+
+ /**
+ * Convert undefined HTTP stack errors into
+ * something a but more meaningful
+ * @param const TInt aError
+ * @return TInt
+ */
+ TInt ConvertUndefinedError( const TInt aError );
+
+ /**
+ * Remove the named transaction from the queue of pending requests.
+ * @param aRemove The transaction to be removed
+ */
+ void RemoveFromQueue( const CImpsHttpTransaction* aRemove );
+
+#ifdef _DEBUG
+
+ /**
+ * Write response headers to the log file
+ * @param aTrans HTTP Transaction
+ */
+ void DumpResponseHeadersL( RHTTPTransaction& aTrans,
+ const TInt aTransactionID );
+
+ /**
+ * Remove the log file from a previous session
+ */
+ void DeleteLogFilesL();
+
+#endif
+
+ /**
+ * From MHTTPTransactionCallback, handles all responses
+ * coming from the remote host
+ * @param aTransaction The finished transaction
+ * @param aEvent Type of the event
+ */
+ void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+ /**
+ * From MHTTPTransactionCallback, called when the RunL() of a transaction leaves
+ * @param aInt The error the HTTP framework left with
+ * @param aTransaction The failed transaction
+ * @param aEvent The event that was being processed
+ * @return KErrNone (HTTP framework panics if client returns any other error)
+ */
+ TInt MHFRunError( TInt aInt, RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+ /**
+ * Handles timer expiry event
+ * @param aRequester The object that started the timer
+ * @param aStatus Status of the timer object
+ */
+ void HandleTransportTimerEventL( TImpsTimingRequester* aRequester,
+ TInt aStatus );
+
+ private: //Data
+
+ TBool iConnected;
+ TBool iSuspend;
+ TBool iSessionClosed;
+ RHTTPSession iHttpSession;
+ RPointerArray<CImpsHttpTransaction> iTransactionQueue;
+ TUriParser8 iDefaultURL;
+ MImpsDataReceiver& iReceiver;
+ MMsgConnManager& iConnManager;
+ MHTTPDataSupplier* iRespBody;
+ CBufBase* iResponseBuffer;
+ HBufC8* iProxyBuffer;
+ HBufC8* iUrlBuffer;
+ HBufC8* iMimeBuffer;
+ TInt iCurrentDataLength;
+ };
+
+#include "HttpTransportAdapter.inl"
+
+#endif
+
+// End of File