diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceevent/src/mceeventreferterminatedstate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceevent/src/mceeventreferterminatedstate.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,162 @@ +/* +* 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: Refer is terminated. +* +*/ + + + + + +// INCLUDE FILES +#include +#include +#include +#include +#include "mcesipeventhelper.h" +#include "mceeventreferterminatedstate.h" +#include "mcesip.h" +#include "mceeventslogs.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceEventReferTerminatedState::CMceEventReferTerminatedState +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMceEventReferTerminatedState::CMceEventReferTerminatedState() + { + } + +// ----------------------------------------------------------------------------- +// CMceEventReferTerminatedState::~CMceEventReferTerminatedState +// Destructor +// ----------------------------------------------------------------------------- +// +CMceEventReferTerminatedState::~CMceEventReferTerminatedState() + { + } + +// ----------------------------------------------------------------------------- +// CMceEventReferTerminatedState::ProcessReferStateL +// Ápply concrete state. +// Be noticed that it will be also update, unRefer +// ----------------------------------------------------------------------------- +// +void CMceEventReferTerminatedState::HandleL( CMceComEvent& /*aEvent*/ ) + { + User::Leave( KMceEventStateError ); + } + +// ----------------------------------------------------------------------------- +// CMceEventReferTerminatedState::HandleReceiveRequestL +// Ápply concrete state. +// Be noticed that it will be also update, unRefer +// ----------------------------------------------------------------------------- +// +void CMceEventReferTerminatedState::HandleReceiveRequestL( + CMceComEvent& aEvent ) + { + MCEEVENTS_DEBUG("CMceEventReferTerminatedState::HandleReceiveRequestL, Entry"); + User::LeaveIfError( aEvent.SIPEvent().Dialog() ? + KErrNone : KMceEventStateError ); + + CSIPServerTransaction& serverTran = aEvent.SIPEvent().Request(); + CSIPServerTransaction* serverTranCheck = &serverTran; + User::LeaveIfError( serverTranCheck ? KErrNone : KMceEventStateError ); + + //Received Subscribe from Mo there is noaction in the previous action + User::LeaveIfError( aEvent.PreviousAction() == KErrNotFound ? + KErrNone : KMceEventStateError ); + + User::LeaveIfError( serverTran.RequestElements() ? KErrNone : KErrCorrupt ); + const CSIPMessageElements& msgElem = + serverTran.RequestElements()->MessageElements(); + + if ( !aEvent.SilentSuppression() ) + { + // Notify after received notify + CDesC8Array* reqheaders = MceSip::UserHeadersToTextArrayL( + serverTran, + aEvent.SIPEvent().Dialog()->Dialog() ); + + CleanupStack::PushL( reqheaders ); + HBufC8* reqcontenttype= NULL; + if( msgElem.ContentType() ) + { + reqcontenttype = msgElem.ContentType()->ToTextValueL(); + } + + CleanupStack::PushL( reqcontenttype ); + HBufC8* reqcontent = + msgElem.Content().AllocLC(); + aEvent.SIPEvent().NotifyReceivedL( reqheaders, + reqcontenttype, + reqcontent ); + CleanupStack::Pop( reqcontent ); + CleanupStack::Pop( reqcontenttype ); + CleanupStack::Pop( reqheaders ); + } + + CSIPResponseElements* newresponse = + MCESIPEventHelper::ReferNotifyRequestReceivedLC( aEvent, msgElem ); + if ( newresponse->StatusCode() == KMceSipOK ) + { + TBool terminated = EFalse; + MCESIPEventHelper::HandleSubscriptionStateHeaderL( msgElem, + terminated ); + serverTran.SendResponseL( newresponse ); + CleanupStack::Pop( newresponse ); + if ( terminated ) + { + // when the subscription state is terminated + //receive notify send 200 OK + if ( !aEvent.SilentSuppression() ) + { + aEvent.SIPEvent().ClientStateChangedL( + CMceRefer::ETerminated, + EFalse ); + } + } + else + { + //the message Notify request is not corrected + User::Leave( KErrArgument ); + } + + } + else + { + //when the notify request is bad, state doesnt change + serverTran.SendResponseL( newresponse ); + CleanupStack::Pop( newresponse ); + User::Leave( KErrArgument ); + } + MCEEVENTS_DEBUG("CMceEventReferTerminatedState::HandleReceiveRequestL, Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceEventReferTerminatedState::HandleResponseReceivedL +// Ápply concrete state. +// Be noticed that it will be also update, unRefer +// ----------------------------------------------------------------------------- +// +void CMceEventReferTerminatedState::HandleResponseReceivedL( + CMceComEvent& /*aEvent*/ ) + { + } + +// End of File