--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/IMPSengine/engsrv/inc/impssendreceive.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,438 @@
+/*
+* Copyright (c) 2002-2005 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: Including CTrReq : transport request buffer element.
+* Including CImpsSendReceive2: This is an adapter between WV engine core and transport dll.
+*/
+
+
+#ifndef CImpsSendReceive2_H
+#define CImpsSendReceive2_H
+
+// INCLUDES
+#include <f32file.h>
+#include "impscspsessionapi.h"
+#include "impsdatachannelapi.h"
+
+// DATA TYPES
+
+// Command types for connection monitor
+enum TImpsTransCmd
+ {
+ EImpsTransNone,
+ EImpsTransOpenAP,
+ EImpsTransCloseDelay,
+ EImpsTransCloseAP,
+ EImpsTransWaitOpen
+ };
+
+// Connection states
+enum TImpsConnectionState
+ {
+ EImpsOnline = 0, // active
+ EImpsOffline, // suspend
+ EImpsNoAP // lost or uninitialized
+ };
+
+// State machine
+enum TImpsTrState
+ {
+ EImpsTrInit = 0,
+ EImpsTrAPOpening,
+ EImpsTrAPOpen,
+ EImpsTrClosing,
+ EImpsTrClosingPDP, // close PDP context only, not bearer events.
+ EImpsTrCloseDelayed,
+ EImpsTrClosedPDP,
+ EImpsTrOpeningPDP,
+ EImpsTrDataOpen
+ };
+
+
+// FORWARD DECLARATIONS
+class CImpsConnManager;
+
+
+/**
+* transport request buffer element
+*/
+class CTrReq : public CBase
+ {
+ public:
+ CTrReq(
+ const TDesC& aTID,
+ TInt aOpId );
+ virtual ~CTrReq();
+ void Destroy();
+
+ TInt iOpId; //lint !e1925
+ TBuf<KImpsMaxTID> iTID; //lint !e1925 // CSP TID
+ TDblQueLink iLink; //lint !e1925
+ };
+
+/**
+* This is an adapter between WV engine core and transport dll.
+*/
+class CImpsSendReceive2 : public CBase, public MImpsDataReceiver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aFs file server
+ * @param aServer WV engine core
+ * @param aOutputBuffer output buffer
+ * @param aMimeType MIME content type to be added in HTTP headers.
+ */
+ static CImpsSendReceive2* NewL(
+ RFs& aFs,
+ MImpsCSPSession& aServer,
+ CBufFlat& aOutputBuffer,
+ TDesC8& aMimeType );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CImpsSendReceive2();
+
+ public: // New functions
+
+ /**
+ * Opens a session to WV SAP/HTTP proxy.
+ * If already opened, error code in status is returned in leave.
+ * @param aID operation id to identify the request.
+ * Used in error situations.
+ * Zero length id means that data channel is opened only.
+ * @param aXmlLog if xml messages are written to log
+ * +1 logging is on, +2 log also polling
+ * @param aSAP WV SAP
+ * @param aIAP CommDb IAP id
+ * @param aDelayed ETrue if open AP must be delayed a little bit.
+ */
+ void OpenL(
+ const TDesC& aTID,
+ TInt aXmlLog,
+ const TDesC& aSAP,
+ TInt aIAP,
+ TBool aDelayed = EFalse );
+
+ /**
+ * Closes the Data channel to WV SAP/HTTP proxy and AP
+ */
+ void CloseTr();
+
+ /**
+ * Closes the session to WV SAP/HTTP proxy.
+ * Yields the control for active scheduler until performs the operation.
+ * @return error code
+ */
+ TInt Close2( );
+
+ /**
+ * Close IAP only. GPRS state changes are still received thru
+ * callback method.
+ */
+ void ClosePDP();
+
+ /**
+ * Open PDP and data channel only
+ * @param aSAP WV SAP
+ * @param aIAP CommDb IAP id
+ */
+ void OpenPDPL(
+ const TDesC& aSAP,
+ TInt aIAP );
+
+ /**
+ * Send a request and waits a response.
+ * Cleans current entry from iRequList in error case so that
+ * DeleteId is not needed.
+ * @param aTID transaction id to identify the request.
+ * Used in error situations.
+ * @param aExpiryTime expiry time
+ */
+ void SendAndWaitL( const TDesC& aTID, TInt aExpiryTime = 0 );
+
+ /**
+ * Is the connection made
+ */
+ TBool isConnected();
+
+ /**
+ * Cancel transport transactions, affects Data Channel only
+ */
+ void Cancel();
+
+ /**
+ * Number of pending requests
+ */
+ inline TInt NbrOfPending();
+
+ /**
+ * Cancel a transaction
+ * @param aTID transaction id to identify the request.
+ */
+ void CancelTrans( const TDesC& aTID );
+
+ /**
+ * Cancel a login transaction
+ * This differs from CancelTrans so that this calls
+ * CSP session's TransportErrorL callback with specific
+ * error codes when ready.
+ * @param aTID transaction id to identify the request.
+ * @return ETrue if Login transaction was sent and Logout should be sent later.
+ */
+ TBool CancelLoginTrans( const TDesC& aTID );
+
+ public: // Functions from base classes
+
+ /**
+ * InputBuffer accessor
+ * @return input buffer to be used for raw 8-bit response data
+ */
+ CBufFlat& InputBuffer();
+
+ /**
+ * Callback for transport request response
+ * This handles the responses to the SendL() method from MImpsSender
+ *
+ * NOTE: It is very important to bear in mind that the memory
+ * area which the fourth parameter points to, MUST be
+ * deallocated by the object that implements this abstract
+ * interface! After the IMPS Data Channel component has
+ * called this method, it is no longer responsible for
+ * maintenance (including deallocation) of this chunk of
+ * heap. Failure to free the memory area will result in
+ * a serious memory leak and, consequently, a crash.
+ * Also note that in many error cases, including a request
+ * timing out, the pointer will be NULL as there is no data
+ * to relay.
+ *
+ * @param TInt Operation-id given in SendL() method
+ * @param TInt Internal error code, KErrNone if successful
+ * @param TInt HTTP status code, 200 if successful
+ * @param HBufC8** Pointer to the raw eight-bit CSP data;
+ * must be deleted by the implementing class
+ * after its contents are no longer needed
+ */
+ virtual void TransportResponse( TInt aId,
+ TInt aError,
+ TInt aHttpStatus,
+ HBufC8* aCspMessage );
+
+ /**
+ * Observer for connection status change and completion of
+ * open and close operations.
+ * @param aConnectionState new state or command executed
+ * @param aStatus error code for the command
+ * @param aOperation True if operation response (open or close)
+ * @param aAuthClose True if authoritatively closed
+ */
+ void APStatusEvent(
+ TImpsConnectionState aConnectionState,
+ TInt aStatus,
+ TBool aOperation,
+ TBool aAuthClose = EFalse );
+
+ /**
+ * Deletes members while active scheduler is still running
+ */
+ void Destroy();
+
+ /**
+ * Connection Manager accessor
+ */
+ MMsgConnManager& ConnManagerHandleL();
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ private:
+
+ /**
+ * C++ default constructor.
+ * @param aFs file server
+ * @param aServer WV engine core
+ * @param aInputBuffer input buffer
+ * @param aOutputBuffer output buffer
+ */
+ CImpsSendReceive2(
+ RFs& aFs,
+ MImpsCSPSession& aServer,
+ CBufFlat& aOutputBuffer );
+
+ /**
+ * Opens a session to WV SAP/HTTP proxy.
+ * If already opened, error code in status is returned in leave.
+ * Other parameters givnen in previous OpenL methos
+ * @param aID operation id to identify the request.
+ * @param aDelayed ETrue if open AP must be delayed a little bit
+ */
+ void OpenL( const TDesC& aTID, TBool aDelayed );
+
+ /**
+ * Generate unique transport operation-id
+ */
+ inline void GenerateId();
+
+ /**
+ * SAP address accessor
+ * @return SAP address
+ */
+ inline TPtrC SAP() const;
+
+ /**
+ * Create a request element for transport adapter
+ * @param aTid transaction-id
+ * @return new operation-id
+ */
+ TInt AddIdL( const TDesC& aTid );
+
+ /**
+ * Gives the transaction-id from operation-id
+ * @param aId operation-id
+ * @return transaction-id
+ */
+ TPtrC OpidToTid( TInt aId );
+
+ /**
+ * Gives operation-id from transaction-id
+ * @param aId transaction-id
+ * @return operation-id
+ */
+ TInt TidToOpid( const TDesC& aId );
+
+ /**
+ * Deletes the request element
+ * @param aId operation-id
+ * @return ETrue if found and deleted
+ */
+ TBool DeleteId( TInt aId );
+
+ /**
+ * Delete all request elements
+ */
+ void DeleteAllIds();
+
+ /**
+ * Callback for transport request response
+ * @param aId operation-id given in send request, 0 means undefined
+ * @param aError status code, KErrNone if successful
+ * @param TInt HTTP status code, 200 if successful
+ * @param HBufC8** Pointer to the raw eight-bit CSP data;
+ * must be deleted by the implementing class
+ * after its contents are no longer needed
+ */
+ void DoTransportResponseL(
+ TInt aId,
+ TInt aError,
+ TInt aHttpStatus,
+ HBufC8** aCspPtr
+ );
+
+ /**
+ * Opens a connection and/or data channel
+ * @param aCmd command
+ * @param IAP, optional
+ */
+ void Open2L( TInt aInt, TBool aDelayed );
+
+ /**
+ * Is the DataChannel OK
+ * @return ETrue if DataChannel open
+ */
+ TBool DoIsConnectedL();
+
+ /**
+ * By default constructor is private.
+ * @param aMimeType MIME content type to be added in HTTP headers.
+ */
+ void ConstructL( TDesC8& aMimeType );
+
+ // By default, prohibit copy constructor
+ CImpsSendReceive2( const CImpsSendReceive2& );
+ // Prohibit assigment operator
+ CImpsSendReceive2& operator= ( const CImpsSendReceive2& );
+
+ /**
+ * Internal state change
+ * @param aNew new status
+ */
+ void NewTrState( TImpsTrState aNew );
+
+ /**
+ * Handle response for our request to transport modules
+ * @param aConnectionState new state or command executed
+ * @param aStatus error code for the command
+ */
+ void DoHandleRespL(
+ TImpsConnectionState aConnectionState,
+ TInt aStatus );
+
+ /**
+ * Handle transport event handling
+ * @param aConnectionState new state or command executed
+ * @param True if authoratively closed, valid only in bearer-lost.
+ */
+ void DoHandleTrEventL(
+ TImpsConnectionState aConnectionState, TBool aAuthClose );
+
+ /**
+ * Open data channel
+ * @return error code
+ */
+ TInt DoOpenDataCh();
+
+
+ private: // Data
+ MImpsCSPSession& iServer;
+ CBufFlat& iOutputBuffer;
+ TBool iProxy;
+ TBool iXmlLog;
+ TInt iID;
+ TInt iOpenId; // used for open/close method
+ TParse iParse;
+ RFs& iFs;
+ TInt iIAP;
+ MImpsSender* iSender;
+ // Request queue
+ TDblQue<CTrReq> iRequList;
+
+ CImpsConnManager* iConnMan;
+ HBufC* iSAP; // TCP/IP address
+ // TImpsTransCmd iPendingCmd;
+ TBuf8<50> iMimeType;
+ TImpsTrState iTrState;
+ };
+
+inline TInt CImpsSendReceive2::NbrOfPending()
+ {
+ return iSender ? iSender->PendingRequests() : 0;
+ }
+
+inline void CImpsSendReceive2::GenerateId( )
+ {
+ iID++;
+ }
+
+inline TPtrC CImpsSendReceive2::SAP() const
+ {
+ return iSAP ? TPtrC( *iSAP ) : TPtrC();
+ }
+
+
+
+#endif // INCLUDE_H
+
+// End of File