diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcefloorctrlengine/inc/fcsession.h --- /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 +#include + + +// 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&: The set of media + * format level attributes. + */ + RPointerArray& FormatAttributeFields(); + + /** + * Sets media format level attributes. + * @param aAttributes, The set of media format level attributes. + * The ownership is transferred. + */ + void SetFormatAttributeFieldsL(RPointerArray* 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* aAttributes); + + private: + + TUint iPort; + RPointerArray* 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