diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipsession.h --- /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 + +// 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