diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/src/mcestateclientreserving.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateclientreserving.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,218 @@ +/* +* 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: +* +*/ + + + + + +#include "mcestateclientreserving.h" +#include "mcesipsession.h" +#include "mceactionset.h" +#include "mceclientserver.h" +#include "mcefcactionset.h" + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::CMceStateClientReserving +// ----------------------------------------------------------------------------- +// +CMceStateClientReserving::CMceStateClientReserving() + : CMceState( KMceStateClientReserving ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::~CMceStateClientReserving +// ----------------------------------------------------------------------------- +// +CMceStateClientReserving::~CMceStateClientReserving() + { + } + + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::DoAcceptL +// ----------------------------------------------------------------------------- +// +TBool CMceStateClientReserving::DoAcceptL( TMceStateTransitionEvent& aEvent ) + { + User::LeaveIfError( + aEvent.Code() == EMceItcCancel || + aEvent.Code() == EMceMediaReserved || + aEvent.Code() == EMceItcEnable || + aEvent.Code() == EMceItcDisable || + IsExtensionRequestEvent( aEvent ) + + ? KErrNone : KErrTotalLossOfPrecision ); + + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::EntryL +// ----------------------------------------------------------------------------- +// +void CMceStateClientReserving::EntryL( TMceStateTransitionEvent& aEvent ) + { + if ( IsExtensionRequestEvent( aEvent )) + { + HandleExtensionRequestEventL( aEvent ); + } + + else + { + switch( aEvent.Code() ) + { + case EMceMediaReserved: + { + EntryMediaReservedL( aEvent ); + break; + } + case EMceItcCancel: + { + EntryCancelL( aEvent ); + break; + } + case EMceItcEnable: + case EMceItcDisable: + { + aEvent.Session().Actions().ControlMediaL( aEvent.ParamIDs(), + (TMceItcFunctions)aEvent.Code() ); + break; + } + default: + { + break; + } + } + } + } + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::EntryMediaReservedL +// ----------------------------------------------------------------------------- +// +void CMceStateClientReserving::EntryMediaReservedL( + TMceStateTransitionEvent& aEvent ) + { + CMceSipSession& session = aEvent.Session(); + CSIPClientTransaction* invite = session.PendingTransaction( + SIPStrings::StringF( SipStrConsts::EInvite ) ); + User::LeaveIfError( invite ? KErrNone : KErrTotalLossOfPrecision ); + + if ( invite->StateL() == CSIPTransactionBase::ETerminated ) + { + if ( MCE_NEED_TO_SEND( session, NULL ) ) + { + // create the SDP + session.Actions().EncodeL(); + // update FC + session.FCActions().UpdateFCOfferL( *session.Offer() ); + // send re-INVITE + session.Actions().SendInviteL(); + } + else + { + // Just go to established state + session.Actions().ClientStateChangedL( CMceSession::EEstablished ); + session.Actions().StateChanged( KMceStateEstablished ); + } + } + else + { + // create SDP + session.Actions().EncodeL(); + // update FC + session.FCActions().UpdateFCOfferL( *session.Offer() ); + // send update + session.Actions().SendUpdateRequestL(); + } + } + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::EntryCancelL +// ----------------------------------------------------------------------------- +// +void CMceStateClientReserving::EntryCancelL( TMceStateTransitionEvent& aEvent ) + { + CMceSipSession& session = aEvent.Session(); + CMceSipSession::TSubState subState = session.SubState(); + + //(try) send CANCEL + session.Actions().SendCancelL(); + + if ( subState == CMceSipSession::EOffering ) + { + session.Actions().StopMedia(); + session.FCActions().ReleaseFC(); + } + else if ( subState == CMceSipSession::EUpdating ) + { + session.Actions().UpdateFailed(); + } + } + +// ----------------------------------------------------------------------------- +// CMceStateClientReserving::ExitL +// ----------------------------------------------------------------------------- +// +void CMceStateClientReserving::ExitL( TMceStateTransitionEvent& aEvent ) + { + + if ( IsExtensionRequestEvent( aEvent )) + { + //Do Nothing; + } + + else + { + CMceSipSession& session = aEvent.Session(); + + switch( aEvent.Code() ) + { + case EMceItcCancel: + { + session.Actions().StateChanged( KMceStateCanceled ); + session.Actions().ClientStateChanged( aEvent.ParamIDs(), + CMceSession::ECancelling ); + + break; + } + case EMceMediaReserved: + { + CSIPClientTransaction* update = session.PendingTransaction( + SIPStrings::StringF( SipStrConsts::EUpdate ) ); + if ( update ) + { + // just sent UPDATE + session.Actions().StateChanged( KMceStateConfirming ); + } + else + { + session.Actions().StateChanged( KMceStateOffering ); + } + break; + } + default: + { + break; + } + } + } + } + +// End of file