diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmceshared/inc/mcecomsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmceshared/inc/mcecomsession.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,625 @@ +/* +* 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: +* +*/ + + + + +#ifndef CMCECOMSESSION_H +#define CMCECOMSESSION_H + +#include +#include +#include +#include +#include + +#include "mcesession.h" +#include "mceclientserver.h" +#include "mcecomserializable.h" +#include "mcesecuresession.h" + +class CMceComMediaStream; +class TMceComFactory; +class TMceComEvent; +class MMceMediaSessionObserver; +class CMceComStreamBundle; + +#ifdef MCE_COMMON_SERVER_SIDE +#include "mcesecuremediasession.h" +#include "mcemediadefs.h" +#include "mcesrv.h" + +class TMceMediaState; +class CMceSrvStream; +class CMceSdpSession; +class CMceMediaManager; +class CMceAdoptedSrvStream; +class CMceSecureMediaSession; +class CSdpDocument; +#endif//MCE_COMMON_SERVER_SIDE + +const TInt KMceMaxSessionModifiers = 10; +const TUint32 KMceMaxTypeOfServiceValue = 256; +const TUint32 KMceDefaultTypeOfServiceValue = 184; + +typedef TFixedArray TMceComSessionModifiers; + +#define MCE_SET_LOCAL_IP_ADDR( session, addr )\ + MCESRV_DEBUG_ADDRVALUE( "local ip", addr );\ + (session)->iLocalIpAddress = addr + +#define MCE_SET_REMOTE_IP_ADDR( session, addr )\ + MCESRV_DEBUG_ADDRVALUE( "remote ip", addr );\ + (session)->iRemoteIpAddress = addr + + +const TBool KMceDeepMergeNo = EFalse; +const TBool KMceDeepMergeYes = ETrue; + + +/** + * Server/Client session + * + * @lib + */ +class CMceComSession : public CBase, + public MMceComSerializable + + { + +public://enums + + enum TType + { + EInSession, + EOutSession + }; + + /** + * Constructor + * @param aType the type of session + * @return The instance + */ + static CMceComSession* NewL(); + + /** + * Constructor + * @param aType the type of session + * @return The instance + */ + static CMceComSession* NewL( TType aType ); + + /** + * Constructor + * @param aType the type of session + * @return The instance + */ + static CMceComSession* NewLC( TType aType ); + + /** + * Constructor + * @param aSerCtx context for serialization + * @return The instance + */ + static CMceComSession* NewL( MMceComSerializationContext& aSerCtx ); + + /** + * Constructor + * @param aSerCtx context for serialization + * @return The instance + */ + static CMceComSession* NewLC( MMceComSerializationContext& aSerCtx ); + + /** + * Destructor. + */ + ~CMceComSession(); + +public: // Functions + + /** + * ID + * @return ID + */ + TUint32 Id() const; + + /** + * Adds media stream into session. + * @param aMediaStream, media stream to be added. + * ownership is transferred. + * @return The current state of the session + */ + void AddStreamL( CMceComMediaStream* aMediaStream ); + + + /** + * Returns the streams belonging to the session. + * @return streams of the session. + */ + RPointerArray& Streams(); + + /** + * Adds media manager observer + * @param aMediaObserver, media manager observer + */ + void SetObserver( MMceMediaSessionObserver& aMediaObserver ); + + /** + * Adds grouped media streams to the session. Changes SDP + * of the session. In order to get complete update, whole + * session must be updated causing sending of re-invite. + */ + void AddBundleL( CMceComStreamBundle* aBundle ); + + /** + * Removes grouped media stream from session. Changes SDP + * of the session. In order to get complete update, whole + * session must be updated causing sending of re-invite. + * @param aBundle bundle to be removed + */ + void RemoveBundleL( CMceComStreamBundle& aBundle ); + + /** + * Gets the grouped media streams of the session. + * @return bundles of the session + */ + const RPointerArray< CMceComStreamBundle >& Bundles() const; + + /** + * Returns media observer. + * @return Media observer + */ + MMceMediaSessionObserver& MediaObserver(); + + /** + * Sets the originator + * @return + */ + void SetOriginatorL( const TDesC8& aOriginator ); + + /** + * Sets the recipient + * @return Media observer + */ + void SetRecipientL( const TDesC8& aRecipient ); + + /** + * Assigner for session modifier + * @param aModifier modifer key + * @return assigner for session modifier + */ + TUint& Modifier( TMceSessionModifier aModifier ); + + /** + * Checks whether RTCP should be used. + * return ETrue, if all the streams indicate RTCP usage, + * otherwise EFalse. + */ + TBool UseRtcp() const; + +public: // serialization + + /** + * Returns serialization id + * @return serialization id + */ + TUint64 SerializationId() const; + + /** + * Internalizes flat data + * @param aReadStream read stream + */ + void InternalizeFlatL( RReadStream& aReadStream ); + + /** + * Externalizes flat data + * @param aWriteStream write stream + */ + void ExternalizeFlatL( RWriteStream& aWriteStream ); + + /** + * Internalizes + * @param aSerCtx context for serialization + */ + void InternalizeL( MMceComSerializationContext& aSerCtx ); + + /** + * Externalizes + * @param aSerCtx context for serialization + */ + void ExternalizeL( MMceComSerializationContext& aSerCtx ); + +public:// + + + /** + * Factory + * @return factory + */ + TMceComFactory BaseFactory(); + + /** + * Factory + * @return factory + */ + static TMceComFactory Factory(); + +public://event handling && updating && cloning + + /** + * Initializes + * @param aParent the parent + */ + void InitializeL(); + + /** + * Traversal event handler + * @param aEvent the event + * @return status, if event was consumed or not or object needs update + */ + virtual void EventReceivedL( TMceComEvent& aEvent ); + + /** + * Updates whole session object with new one + * @param aSession new session + */ + void UpdateL( CMceComSession& aSession ); + + /** + * Clones whole session object + */ + CMceComSession* CloneL( TBool aPullModeUpdate = EFalse ); + + /** + * Is structure changed during update + */ + TBool& IsStructureChanged(); + + void UpdateFlatL( CMceComSession& aSession ); + + +#ifdef MCE_COMMON_SERVER_SIDE + + static void Delete( CMceComSession*& aThis, CMceMediaManager& aManager ); + + CMceSdpSession& SdpSession() const; + + CMceComSession* Backup(); + + TBool IsBackup(); + + TBool IsMerged(); + + void Merge( CMceComSession& aSession, TBool aDeepMerge = KMceDeepMergeNo ); + + void UnMerge(); + + void UnMergeL( CMceComSession& aSession ); + + void AttachSDPSessionL( CMceSdpSession& aSdpSession ); + + void DetachSDPSession(); + + TMceMMState SetNegotiationStateL( TMceMediaState* aNewState ); + + void SetNegotiationState( TMceMediaState* aNewState ); + + TMceMediaState& NegotiationState() const; + + void PrepareL( CMceMediaManager& aManager ); + + void PrepareL(); + + CMceComSession* CloneAndMergeLC( CMceComSession& aUpdate ); + + RPointerArray& MccStreams(); + + RPointerArray& AdoptedMccStreams(); + + void AdoptStreamL( CMceSrvStream& aStream ); + + CMceSrvStream* RemoveAdoptedStream( CMceSrvStream& aStream ); + + /** + * Create Secure Session + */ + CMceSecureMediaSession& SecureSessionL(); + + CMceSecureMediaSession* SecureSession(); + + void CloneSecureSessionL(CMceComSession& aSession); + + void DeleteSecureSession(); + + void SdpCleanup( CSdpDocument* aPrevious, CSdpDocument* aReplacement ); + + TMceNegotiationAnswerType& AnswerType(); + +#endif//MCE_COMMON_SERVER_SIDE + + +private: + + /** + * C++ default constructor. + */ + CMceComSession(); + + /** + * C++ constructor. + * @param aType the type of session + */ + CMceComSession( TType aType ); + + /** + * second-phase constructor + */ + void ConstructL(); + + /** + * second-phase copy constructor + */ + void ConstructL( CMceComSession& aSession, + TBool aPullModeUpdate = EFalse); + + /** + * Clone streams + * @param aSession session + */ + void CloneStreamsL( CMceComSession& aSession ); + + /** + * Clone bundles + * @param aSession session + */ + void CloneBudlesL( CMceComSession& aSession ); + + /** + * Update streams + * @param aSession session + */ + void UpdateStreamsL( CMceComSession& aSession ); + + /** + * Update bundles + * @param aSession session + * @param aStreams streams + */ + void UpdateBundlesL( CMceComSession& aSession, + const RPointerArray& aStreams ); + + + +public: // Owned serialized data + + + /** + * type of session + */ + TUint32 iID; + + /** + * type of session + */ + TType iType; + + + /** + * state of session + */ + CMceSession::TState iState; + + /** + * recipient + */ + HBufC8* iRecipient; + + /** + * originator + */ + HBufC8* iOriginator; + + /** + * is connection active + */ + TBool iIsConnectionActive; + + /** + * Dialog id + */ + TUint32 iDialogId; + + /** + * Session modifiers + */ + TMceComSessionModifiers iSessionModifiers; + +public: // Owned data + + /** + * Internet access point used + */ + TUint32 iIapId; + + /** + * Mcc session Id + */ + TUint32 iMccID; + + /** + * Local host IP-address (IPv4 or IPv6) + */ + TInetAddr iLocalIpAddress; + + /** + * Remote host IP-address (IPv4 or IPv6) + */ + TInetAddr iRemoteIpAddress; + + /** + * has structure changed during update + */ + TBool iStructureChanged; + + /** + * Should use local preconditions + */ + TBool iUseLocalPreconditions; + + /** + * Should use remote preconditions + */ + TBool iUseRemotePreconditions; + + TBool iFcSignallingRequired; + + TBool iRequireSignalling; + // Setting TMccNetService MediaQoS + TUint32 iServiceType; + + TUint iAnswerType; + + TUint iCodecSelection; + + /* Remote use require header with precondtion option*/ + TBool iRemoteSecPreconditionsRequired ; + +public: // NOT Owned data + + /** + * Media manager observer + */ + MMceMediaSessionObserver* iMediaObserver; + + /** + * cloned from + */ + CMceComSession* iCloneOrigin; + + +public: // Owned invite related data + + /** + * Session timer interval, in milliseconds + */ + TUint32 iTimeout; + + /** + * Minimun SE received in 422, in milliseconds + */ + TUint32 iMinSE; + + /** + * Is this UA performing the refresh requests + */ + TBool iRefresh; + + /** + * sip headers + */ + CDesC8Array* iSIPHeaders; + + /** + * content type + */ + HBufC8* iSIPContentType; + + /** + * content headers + */ + CDesC8Array* iSIPContentHeaders; + + /** + * content + * NOT serialized + */ + HBufC8* iSIPContent; + + /** + * local sdp session lines + */ + CDesC8Array* iLocalSessionSDPLines; + + /** + * remote sdp session lines + */ + CDesC8Array* iRemoteSessionSDPLines; + + /** + * Flag to indicate if the secure session is needed + * To create secure link in MCC, this has to be set as True. + */ + TBool iIsSecureSession; + + TBool iPullModeUpdate; + + /** + * Crypto Suite Set by client + */ + RArray iClientCryptoSuites; + + /** + * secure level by the contact header in offer/Answer which is + * with SIPSUri or transport parameter is tls. + */ + CMceSession::TControlPathSecurityLevel iSipContactAddrSecure; + + +private: // Owned data + + + /** + * media streams + */ + RPointerArray iMediaStreams; + + /** + * bundles + */ + RPointerArray iBundles; + +#ifdef MCE_COMMON_SERVER_SIDE + + + RPointerArray iMccStreams; + + RPointerArray iMccAdoptedStreams; + + //current state + TMceMediaState* iNegotiationState; + + CMceSdpSession* iSdpSession; + + + /** + * SecureMediaSession + */ + CMceSecureMediaSession* iSecureMediaSession; + + + //definitions for unit testing + MCEMM_UT_DEFINITIONS + friend class UT_CMceSipSession; + friend class UT_CMceStateOffering; + +#endif//MCE_COMMON_SERVER_SIDE + + + }; + + +#endif \ No newline at end of file