multimediacommsengine/mmceshared/inc/mcecomsession.h
changeset 0 1bce908db942
--- /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 <e32base.h> 
+#include <e32std.h>  
+#include <badesca.h>
+#include <in_sock.h>
+#include <s32strm.h>
+
+#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<TUint, KMceMaxSessionModifiers> 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<CMceComMediaStream>& 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<CMceSrvStream>& MccStreams();
+    
+    RPointerArray<CMceSrvStream>& 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<CMceComMediaStream>& 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<TMceCryptoContext> 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<CMceComMediaStream> iMediaStreams;
+	
+    /**
+     * bundles
+     */
+	RPointerArray<CMceComStreamBundle> iBundles;
+
+#ifdef MCE_COMMON_SERVER_SIDE
+
+
+    RPointerArray<CMceSrvStream> iMccStreams;
+    
+    RPointerArray<CMceSrvStream> 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