multimediacommsengine/mmcefloorctrlengine/inc/fcsession.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcefloorctrlengine/inc/fcsession.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 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:    The class provides the FC session information
+*
+*/
+
+
+
+
+#ifndef CFCSESSION_H
+#define CFCSESSION_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <sdpcodecstringpool.h>
+
+
+// FORWARD DECLARATIONS
+class MFCPlugIn;
+class CFCInterface;
+class CSdpDocument;
+class CSdpMediaField;
+class CSdpConnectionField;
+class SdpCodecStringPool;
+class CSdpFmtAttributeField;
+
+// CLASS DECLARATION
+
+/**
+ * Class contains FCSession information of particular FC sesseion service
+ * If the preconditions are not met function leaves with KErrArgument system
+ * error code.
+ * @lib CFCPlugInEngine.lib
+ */
+class CFCSession: public CBase
+	{
+	public:
+		/** Parameter for Session comparision*/
+		enum TComparison
+			{
+			/** Port Number in SDP */
+			EPort = 1,
+			/** PlugIn Name in SDP */
+			EName = 2
+			};
+
+		/**
+		* Constructs an object
+		* @param aPlugIn the plug-in
+		* @param aIapId the IAP ID
+		* @param aPort the port
+		* @returns new instance
+		*/
+		static CFCSession* NewL( MFCPlugIn* aPlugIn, 
+		                         TUint32 aIapId, 
+		                         TUint32 aPort );
+
+		/**
+		* Constructs an object and adds the pointer to the cleanup stack;
+		* leaves on failure
+		* @param aPlugIn the plug-in
+		* @param aIapId the IAP ID
+		* @param aPort the port
+		* @return new instance
+		*/
+		static CFCSession* NewLC( MFCPlugIn* aPlugIn, 
+		                          TUint32 aIapId, 
+		                          TUint32 aPort );
+
+		/**
+		* Destructor.
+		*/
+		~CFCSession();
+		
+		/**
+		* Sets media port defined for the FCSession.
+		* @param aPort The port
+		*/
+		void SetPort( const TUint aPort );
+
+		/**
+		* Gets media port defined for the FCSession
+		* @return media port
+		*/
+		TUint Port() const;
+
+		/**
+		* Gets the negotiated floor control plugIn
+		* @return negotiated floor control plugIn
+		*/
+		const TDesC8& NegotiatedFCPlugIn() const;
+
+		/**
+		* Gets the set of media format level attributes.
+		* @return RPointerArray<CSdpFmtAttributeField>&: The set of media 
+        *         format level attributes.
+		*/
+		RPointerArray<CSdpFmtAttributeField>& FormatAttributeFields();
+		
+		/**
+		* Sets media format level attributes.
+		* @param aAttributes, The set of media format level attributes.
+		*        The ownership is transferred.
+		*/
+		void SetFormatAttributeFieldsL(RPointerArray<CSdpFmtAttributeField>* aAttributes);
+		
+   		/**
+		* Reads & Store remote parameters of FC from offer/answer document.
+		* @param aSdpDocument, SDP document containing SDP information
+		*/
+		void StoreInfoL(const CSdpDocument& aSdpDocument);
+	
+		/**
+		* Adds or modifies the media line for FCSession to SDP document
+	    * @param aSdpDocument SDP document to be add/modify the media information
+		*/
+		void UpdateSDPL( CSdpDocument& aSdpDocument );
+
+		/**
+		*Session is released 
+		*/
+		void ReleaseSession();
+		
+		/**
+		* Session is ready to send
+		* tb_priority might be =0;
+		* Socket is open, and start to listen
+		*/
+		void ConnectionReadyL();
+		
+		/**
+		* Send the Data to the predefined addresses
+		* tb_priority must > 0
+		* @param aData, sending via this plugIn
+		*/
+		void SendToNetL(HBufC8* aData);
+		
+		/**
+		* Return a pointer to the FC plug-in, ownership is not transfered.
+		* @return MFCPlugin& The FCPlugin
+		*/
+		MFCPlugIn* PlugIn() const;
+		
+		/**
+		* Returns truth value whether or not this the plugin is 
+		* to be receive data in this sessions port.
+		*/
+		TBool IsReceiver();
+		
+		/**
+		* Updates the port and receiver flag. KFCDefaultPort means, that
+		* the session will not be receiving.
+		*/
+		void Update( TUint32 aPort );
+		
+		/**
+        * Are the floor control parameters changed
+        */
+		TBool UpdateNeeded();
+		
+	private:
+		/**
+		* Default constructor
+		*/
+		CFCSession( TUint32 aPort );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+		void ConstructL( MFCPlugIn* aPlugIn, TUint32 aIapId );
+		
+		/**
+		* Validate media format level attributes.
+		* @return 0 if iSdpFmtAttributeFields length is 0 or notset
+		*	      1 if iSdpFmtAttributeFields is set and length is not 0
+		*/
+		TBool IsFmtAttributeValid();
+		
+		/**
+		* Finds the index off FC media line in given array.
+		* @param aMediaFields, the array of media fields.
+		* @return index in the array, KErrNotFound if not found.
+		*/
+		TInt FindMediaField( 
+		    const RPointerArray< CSdpMediaField >& aMediaFields ) const;
+		    
+		/**
+		* Get the port number from SDP media fields based on the
+		* media protocol specified by plugin. Returns 0, if there's no
+		* media line for the protocol.
+		* @param aMediaFields, media fields
+		* @return a specific SDP media port based on the media protocol.
+		*/
+		TUint DecodeSDPMediaPort( 
+		    const RPointerArray< CSdpMediaField >& aMediaFields ) const;
+		
+		/**
+		* Get the connectinon address from SDP doc
+		* @param aSdpDocument, SDP document containing SDP media information
+		* @return, the connection address
+		*/
+		HBufC* DecodeConnectionAddrL( const CSdpConnectionField* aConnectionField ) const;
+		
+		/**
+		* Clean-up method, that can be given to the cleanup stack.
+		*/
+		static void ArrayCleanup(TAny* aArray);
+		
+		
+		static void ArrayCleanupAndDelete(TAny* aArray);
+	
+		/**
+		* Sets media format level attributes.
+		* @param aAttributes, The set of media format level attributes.
+		*        The ownership is transferred.
+		*/
+		void DoSetFormatAttributeFieldsL(RPointerArray<CSdpFmtAttributeField>* aAttributes);
+		
+	private:
+		
+		TUint iPort;
+		RPointerArray<CSdpFmtAttributeField>* iSdpFmtAttributeFields;
+		// The plug-in, owned
+		CFCInterface* iPlugIn;
+		TBool iIsReceiver;
+		TBool iUpdateNeeded;
+		
+	private: // For testing purposes
+		friend class UT_CFCSession;
+	};
+
+#endif // CFCSession_H
+
+//  End of File