--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/mmshttptransport/inc/mmssession.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2002-2007 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:
+* MMS transport session
+*
+*/
+
+
+
+#ifndef MMSSESSION_H
+#define MMSSESSION_H
+
+// INCLUDES
+#include <e32base.h>
+#include <http/rhttpsession.h>
+#include <mhttpsessioneventcallback.h>
+#include <rhttpheaders.h>
+
+// CONSTANTS
+_LIT8( KProtocolHTTP, "HTTP/TCP" );
+_LIT8( KXProfile, "x-wap-profile");
+
+// MACROS
+// DATA TYPES
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+class CMmsTransaction;
+class CMmsBearerStatus;
+class RSocketServ;
+class RConnection;
+class MMmsCodecDataSupplier;
+class MMmsCodecDataSink;
+
+// CLASS DECLARATION
+
+/**
+* Class for MMS server MTM to send and fetch messages
+* @since 2.0
+* @lib mmstransport.lib
+*/
+class CMmsSession : public CActive, public MHTTPSessionEventCallback
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aPriority Priority for this active object
+ * @param aSocketServ opened socket server session
+ * @param aConnection opened connection
+ */
+ IMPORT_C static CMmsSession* NewL(
+ TInt aPriority,
+ RSocketServ& aSocketServ,
+ RConnection& aConnection );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMmsSession();
+
+ public: // New functions
+
+ /**
+ * Initializes session headers for HTTP protocol.
+ * @param aProxyAddress Proxy address: ip address + port
+ * @param aUseProxy is a proxy to be used with this access point
+ * @param aMaxReceiveSize maximum size of incoming message that can be accepted
+ * @param aMaxSendSize maximum size of message to be sent ( needed for WAP only )
+ * @param aStatus Status of the calling active object
+ */
+ IMPORT_C void OpenL(
+ const TDesC8& aProxyAddress,
+ const TBool aUseProxy,
+ const TInt32 aMaxReceiveSize,
+ const TInt32 aMaxSendSize,
+ TRequestStatus& aStatus );
+
+ /**
+ * Delivers the message to MMSC.
+ * @param aUri Uri of the MMSC
+ * @param aMessageBuffer In/Out parameter. In: message to posted
+ * Out: response from MMSC
+ * @param aDataSupplier The class that will serve as data supplier
+ * for chunked transfer.
+ * @param aDataSink The class that will serve as data sink for chunked receive
+ * @param aStatus Status of the calling active object
+ */
+ IMPORT_C void SendMessageL(
+ const TDesC& aUri,
+ CBufFlat& aMessageBuffer,
+ MMmsCodecDataSupplier& aDataSupplier,
+ MMmsCodecDataSink& aDataSink,
+ TRequestStatus& aStatus );
+
+ /**
+ * Get message from MMSC.
+ * @param aUri URI of the message to fetch
+ * @param aMessageBuffer Buffer for the message
+ * @param aDataSupplier The class that will serve as data supplier
+ * for chunked transfer.
+ * @param aDataSink The class that will serve as data sink for chunked receive
+ * @param aStatus Status of the calling active object
+ */
+ IMPORT_C void FetchMessageL(
+ const TDesC& aUri,
+ CBufFlat& aMessageBuffer,
+ TInt32 aExpectedReceiveSize,
+ MMmsCodecDataSupplier& aDataSupplier,
+ MMmsCodecDataSink& aDataSink,
+ TRequestStatus& aStatus );
+
+ public: // Functions from base classes
+
+ /**
+ * Session event Callback
+ * from MHTTPSessionEventCallback
+ * Called when the filters registration conditions are satisfied for events that occur
+ * on the session.
+ * @ param aEvent The session event that has occured.
+ * @ exception Any leaves must be handled by the appropriate MHFRunError.
+ */
+ void MHFSessionRunL( const THTTPSessionEvent& aEvent );
+
+ /**
+ * Session event error Callback
+ * from MHTTPSessionEventCallback
+ * Called when MHFRunL leaves from a session event. This works in the same
+ * way as CActve::RunError
+ * @param aError The leave code that RunL left with.
+ * @param aEvent The Event that was being processed.
+ * @return KErrNone if the error has been cancelled or the code
+ * of the continuing error otherwise.
+ */
+ TInt MHFSessionRunError( TInt aError, const THTTPSessionEvent& aEvent );
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ /**
+ * From CActive
+ */
+ virtual void DoCancel();
+
+ /**
+ * From CActive
+ */
+ virtual void RunL();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CMmsSession( TInt aPriority );
+
+ /**
+ * By default Symbian OS constructor is private.
+ * @param aSocketServ opened socket server session
+ * @param aConnection opened connection
+ */
+ void ConstructL( RSocketServ& aSocketServ, RConnection& aConnection );
+
+ // By default, prohibit copy constructor
+ CMmsSession( const CMmsSession& );
+ // Prohibit assignment operator
+ CMmsSession& operator= ( const CMmsSession& );
+
+ /**
+ * Set UserAgent string to a fixed value.
+ * FOR TESTING PURPOSES ONLY.
+ */
+ void SetFixedUserAgentL();
+
+ /**
+ * Sets a header to be used throughout all transactions
+ * @param aHeaders the header collection where the new header is inserted
+ * @param aHdrField enumeration of the header field
+ * @param aHdsValue the string value of the header to be set
+ */
+ void SetHeaderL(
+ RHTTPHeaders aHeaders,
+ TInt aHdrField,
+ const TDesC8& aHdrValue );
+
+ public: // Data
+ protected: // Data
+ private: // Data
+
+ enum TSessionStatus
+ {
+ ESessionIdle = 0,
+ ESessionSending,
+ ESessionFetching
+ };
+
+ TBool iConnected; // Do we have a connection to WAP GW
+ CMmsTransaction* iTransaction; // state machine for making transactions
+ TRequestStatus* iRequestStatus; // status of the calling program
+ TSessionStatus iSessionStatus; // Status of the session object
+ RHTTPSession iHTTPSession; // transport session
+ THTTPSessionEvent iHTTPEvent; // event from HTTP
+ RHTTPHeaders iSessionHeaders; // headers common to all transactions
+ TBool iHeadersCreated; // if headers have not been created, they cannot be deleted
+ TBool iSessionOpened; // if HTTP session has not been opened, it cannot be closed
+ CMmsBearerStatus* iTransferControl;
+ TInt iTransactionTimeout;
+ TInt iMaxReceiveSize;
+ TInt iMaxSendSize;
+ TInt iError;
+ RSocketServ* iSocketServ;
+ RConnection* iConnection;
+ HBufC8* iUserAgent;
+ HBufC8* iUaProf;
+ // pointer to the class that will serve as data supplier for chunked transfer.
+ // pointer is owned by caller - we don't delete it
+ MMmsCodecDataSupplier* iDataSupplier;
+ // pointer to the class that will serve as data sink for chunked receive.
+ // pointer is owned by caller - we don't delete it
+ MMmsCodecDataSink* iDataSink;
+
+ public: // Friend classes
+ protected: // Friend classes
+ private: // Friend classes
+ };
+
+#endif // MMSSESSION_H
+
+// End of File