multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipsession.h
changeset 0 1bce908db942
child 8 2a28ef775f15
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipsession.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,318 @@
+/*
+* 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 CMCENATSIPSESSION_H
+#define CMCENATSIPSESSION_H
+
+#include "nspsessionobserver.h"
+#include "mcenatactions.h"
+#include "mcenatevents.h"
+#include "mcesrv.h"
+#include "mcesipsession.h"
+#include <e32base.h>
+
+// FORWARD DECLARATION
+class CMceNatSipStateMachine;
+class CMceComSession;
+class CDesC8Array;
+class TMceNatStateTransitionEvent;
+class CSIPProfile;
+
+/**
+* This class represents NAT SIP session
+* 
+* Class provides methods to handle SIP session
+* specifig ITC functions and to receive SIP requests and 
+* responses.
+
+*  @lib 
+*  @since
+*/
+class CMceNatSipSession : public CMceSipSession,
+                          public MNSPSessionObserver,
+                          public MMceNatActions
+	{
+public: // Enumerations
+
+    /* Nat session entry point */
+    enum TMceNatEntryPoint
+        {
+        ENatEntryNone,
+        ENatEntryUpdated,
+        ENatEntryHandleSIPEvent
+        };
+
+public: // Constructors and destructor
+
+	/**
+	* Two-phased constructor.
+	* @param aClientSession client
+	* @param aSIPConnection SIP connection 
+	* @param aStateMachine SIP session state machine
+	* @param aParams session parameters, ownership is not transferred
+	* @return SIP session
+	*/
+	static CMceNatSipSession* NewL( CMceCsSession& aClientSession, 
+	                                CMceSipConnection& aSIPConnection,
+								    CMceSipStateMachine& aStateMachine,
+								    CSIPProfile& aProfile,
+								    const CDesC8Array* aParams = NULL );
+
+	/**
+	* Two-phased constructor.
+	* @param aClientSession client
+	* @param aSIPConnection SIP connection 
+	* @param aStateMachine SIP session state machine
+	* @param aParams session parameters, ownership is not transferred
+	* @return SIP session
+	*/
+	static CMceNatSipSession* NewLC( CMceCsSession& aClientSession, 
+	                                 CMceSipConnection& aSIPConnection,
+								     CMceSipStateMachine& aStateMachine,
+								     CSIPProfile& aProfile,
+								     const CDesC8Array* aParams = NULL );
+
+
+	/**
+	* Two-phased constructor.
+	* @param aClientSession client
+	* @param aSIPConnection SIP connection 
+	* @param aStateMachine SIP session state machine
+	* @param aParams session parameters, ownership is not transferred
+	* @return SIP session
+	*/
+	static CMceNatSipSession* NewL( CMceCsSession& aClientSession, 
+	                                CMceSipConnection& aSIPConnection,
+								    CMceSipStateMachine& aStateMachine,
+								    const CDesC8Array* aParams = NULL );
+
+	/**
+	* Two-phased constructor.
+	* @param aClientSession client
+	* @param aSIPConnection SIP connection 
+	* @param aStateMachine SIP session state machine
+	* @param aParams session parameters, ownership is not transferred
+	* @return SIP session
+	*/
+	static CMceNatSipSession* NewLC( CMceCsSession& aClientSession, 
+	                                 CMceSipConnection& aSIPConnection,
+								     CMceSipStateMachine& aStateMachine,
+								     const CDesC8Array* aParams = NULL );
+	
+	/**
+	* Destructor.
+	*/
+	~CMceNatSipSession();
+
+
+public: // from CMceSipSession
+
+    /**
+    * Updates media
+    * @return return status:
+    *       -System error < 0: error situation
+    *       -KMceReady: update was synchronous
+    *       -KMceAsync: updating asynchronously
+    */
+    TMceReturnStatus UpdateMediaL();
+    
+    /**
+    * Callback function to indicate MCC session is updated.
+    *
+    * @param        aSession            session body
+    */
+    void Updated( CMceComSession& aSession );
+
+    CSdpDocument* Offer();
+
+    TBool NatSession() const;
+
+    TInt NatState() const;
+
+	TBool IsNatDisabled() const;
+
+	/**
+    * Method used to check Resource Reservation Status
+    *
+    * @return       status TMceReturnStatus 
+    *				-KMceAsync (Reservation in-progress) 
+    *				-KMceReady (Resource Reserved)
+    */
+    TMceReturnStatus ReserveL();
+
+
+public: // from MNSPSessionObserver
+
+    /**
+    * see base class
+    */
+    void Initialized( TUint aSessionId );
+    
+    /**
+    * see base class
+    */
+    void OfferReady( TUint aSessionId, CSdpDocument* aOffer );
+    
+    /**
+    * see base class
+    */
+    void AnswerReady( TUint aSessionId, CSdpDocument* aAnswer );
+    
+    /**
+    * see base class
+    */
+    void UpdateSdp( TUint aSessionId, CSdpDocument* aOffer );
+    
+    /**
+    * see base class
+    */
+    void ErrorOccurred( TUint aSessionId, TInt aError );
+
+	
+   /**
+    * see base class
+    */
+    void IcmpErrorOccurred( TUint aSessionId, TInt aError );
+    
+
+
+public: // from MMceNatActions
+
+    /**
+    * see base class
+    */
+    TInt CreateOfferL();
+    
+    /**
+    * see base class
+    */
+    TInt ResolveL();
+    
+    /**
+    * see base class
+    */
+    TInt DecodeAnswerL();
+    
+    /**
+    * see base class
+    */
+    void UpdateL();
+    
+    /**
+    * see base class
+    */
+    void UpdateRemoteAddressL();
+    
+    /**
+    * see base class
+    */
+    void SetOffered( TMceNatOfferedSdp aOffered );
+    
+    /**
+    * see base class
+    */
+    void SdpCleanup( CSdpDocument* aPrev, CSdpDocument* aRep );
+    
+    /**
+    * see base class
+    */
+    void Continue();
+    
+    /**
+    * see base class
+    */
+    void StateChangedL( TMceNatStateTransitionEvent& aEvent,
+                        TUint aNewState );
+
+    void SetNeedtoReceive();
+
+	/** 
+	* Get Resource Reservation Status
+	*/       
+	TInt GetResourceReservationStatus();
+		
+	TMceReturnStatus GetReservationStatus();
+	
+	void SetReservationStatus(TMceReturnStatus aStatus);
+
+	void ResumeNatUpdated();
+
+private: // Constructors
+
+	CMceNatSipSession( CMceCsSession& aClientSession,
+	                   CMceSipConnection& aSIPConnection,
+					   CMceSipStateMachine& aStateMachine,
+					   CSIPProfile& aProfile );
+
+	CMceNatSipSession( CMceCsSession& aClientSession,
+	                   CMceSipConnection& aSIPConnection,
+					   CMceSipStateMachine& aStateMachine );
+    
+	void ConstructL( CMceCsSession& aClientSession,
+	                 CMceSipConnection& aSIPConnection,
+	                 const CDesC8Array* aParams );
+    
+    void TryNatSessionL( CMceSipConnection& aSIPConnection,
+                         const CDesC8Array* aParams );
+
+
+private: // from CMceSipSession
+
+    void HandleSIPEvent( TMceSipEventCode aEventCode, CSIPDialog& aDialog );
+
+
+private: // New functions
+    
+    void SafeDelete( CSdpDocument* aDocument );
+    
+    void NatErrorOccurred( TInt aError );
+    
+    void PrepareNatSessionUpdate();
+    
+    void SetMediaQosL();
+
+private: // Own Data
+    
+    TMceReturnStatus iReserveStatus;
+    
+    // Entry point from base class, stored for later use.
+    TMceNatEntryPoint iEntryPoint;
+    
+    // Sip event code stored here for later use.
+    TMceSipEventCode iSipEvent;
+    
+    // Session identifier from NAT FW
+    TUint iSessionId;
+    
+    // Flag indicating which Sdp document is valid.
+    TUint iOfferedSdp;
+    
+    // Flag indicating local failure in NAT FW
+    TBool iNatDisabled;
+    
+    // NAT state machine, own.
+    CMceNatSipStateMachine* iNatStateMachine;
+    
+	MCESRV_UT_DEFINITIONS
+    
+	};
+
+#endif // CMCENATSIPSESSION_H
+
+// End of File