diff -r 000000000000 -r 094583676ce7 IMPSengine/ImpsDataChannel/inc/HttpTransportAdapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMPSengine/ImpsDataChannel/inc/HttpTransportAdapter.h Thu Dec 17 08:41:52 2009 +0200 @@ -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 +//HTTP Stack +#include +//Bearer observer +#include +//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 aFmt, ... ); + + /** + * A global logging function for 8 bit data. + * @param aCommand command to be handled + */ + static void WriteToLog( TRefByValue 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 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