--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestate.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,309 @@
+/*
+* 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 <sipdialogassocbase.h>
+#include <sipdialog.h>
+#include <sipconnection.h>
+#include "mcestate.h"
+#include "mceactionset.h"
+#include "mcesipsession.h"
+#include "mcecomsession.h"
+#include "mcesipconnection.h"
+#include "mceevents.h"
+#include "mcesip.h"
+#include "mcesrvlogs.h"
+
+#define MARK_EXIT ETrue
+
+// -----------------------------------------------------------------------------
+// CMceState::CMceState
+// -----------------------------------------------------------------------------
+//
+CMceState::CMceState ( TMceStateIndex aId )
+ : iId( aId )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMceState::CMceState
+// -----------------------------------------------------------------------------
+//
+TMceStateIndex CMceState::Id ()
+ {
+ return iId;
+ }
+
+// -----------------------------------------------------------------------------
+// CMceState::~CMceState
+// -----------------------------------------------------------------------------
+//
+CMceState::~CMceState()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMceState::AcceptL
+// -----------------------------------------------------------------------------
+//
+TBool CMceState::AcceptL( TMceStateTransitionEvent& aEvent )
+ {
+ TBool ignore = EFalse;
+
+ if ( aEvent.Session().SIPConnection().State() == CSIPConnection::EActive )
+ {
+ if ( aEvent.Code() == EMceProvisionalResponse &&
+ MceSip::ResponseCode( aEvent.Session().Response())==KMceSipTrying )
+ {
+ ignore = ETrue;
+ }
+ else
+ {
+ ignore = !DoAcceptL( aEvent );
+ }
+ }
+ else
+ {
+ User::Leave( KErrNotReady );
+ }
+
+ return !ignore;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMceState::StateEntry
+// -----------------------------------------------------------------------------
+//
+void CMceState::StateEntry( TMceStateTransitionEvent& /*aEvent*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMceState::StateExitL
+// -----------------------------------------------------------------------------
+//
+void CMceState::StateExitL( TMceStateTransitionEvent& aEvent )
+ {
+ CMceSipSession& session = aEvent.Session();
+ User::LeaveIfNull( &session );
+
+ session.CurrentState( MARK_EXIT );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMceState::MediaErrorOccured
+// -----------------------------------------------------------------------------
+//
+void CMceState::MediaErrorOccured( TMceStateTransitionEvent& /*aEvent*/ )
+ {
+ // NOP
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CMceState::IsExtensionRequestEvent
+// -----------------------------------------------------------------------------
+//
+
+TBool CMceState::IsExtensionRequestEvent( TMceStateTransitionEvent& aEvent )
+ {
+ MCESRV_DEBUG("CMceState::IsExtensionRequestEvent, Entryt");
+ TBool extensionRequest = EFalse;
+ CMceSipSession& session = aEvent.Session();
+
+ switch ( aEvent.Code() )
+ {
+ case EMceResponse:
+ case EMceProvisionalResponse:
+ case EMceRedirectionResponse:
+ case EMceErrorResponse:
+ {
+ if ( &session.Response() )
+ {
+ RStringF method = session.Response().Type();
+ extensionRequest = session.Actions().IsExtensionRequest( method );
+ }
+ break;
+ }
+
+ case EMceItcRequestSend:
+ case EMceItcReplySend:
+ case EMceRequest:
+ {
+ extensionRequest = ETrue;
+ break;
+ }
+
+ default:
+ {
+ //NO OP
+ break;
+ }
+ }
+
+
+ MCESRV_DEBUG("CMceState::IsExtensionRequestEvent, Exit");
+
+ return extensionRequest;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMceState::HandleExtensionRequestEvent
+// -----------------------------------------------------------------------------
+//
+
+void CMceState::HandleExtensionRequestEventL( TMceStateTransitionEvent& aEvent )
+
+ {
+ //Handle Non-Target Refresh Request Here
+ MCESRV_DEBUG("CMceState::HandleExtensionRequestEventL, Entryt");
+
+ switch ( aEvent.Code() )
+ {
+ case EMceResponse:
+ case EMceProvisionalResponse:
+ case EMceRedirectionResponse:
+ case EMceErrorResponse:
+ {
+ EntryReceiveExtensionResponseL( aEvent );
+ break;
+ }
+
+ case EMceItcReplySend:
+ {
+ EntrySendExtensionResponseL ( aEvent );
+ break;
+ }
+
+ case EMceItcRequestSend:
+ {
+ EntrySendExtensionRequestL ( aEvent );
+ break;
+ }
+
+ case EMceRequest:
+ {
+ EntryReceiveExtensionRequestL ( aEvent );
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ MCESRV_DEBUG("CMceState::HandleExtensionRequestEvent, Exit");
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMceState::EntrySendExtensionRequestL
+// -----------------------------------------------------------------------------
+//
+void CMceState::EntrySendExtensionRequestL( TMceStateTransitionEvent& aEvent )
+ {
+ MCESRV_DEBUG("CMceState::EntrySendExtensionRequestL, Entryt");
+ CMceSipSession& session = aEvent.Session();
+
+ if (( session.Dialog()->Dialog().State() != CSIPDialog::EInit ) &&
+ ( session.Dialog()->Dialog().State() != CSIPDialog::ETerminated ))
+
+ {
+ session.Actions().SendExtensionRequestL( aEvent.ParamClientMessage(),
+ aEvent.ParamIDs());
+ }
+ else
+ {
+ User::Leave( KErrTotalLossOfPrecision );
+ }
+
+ MCESRV_DEBUG("CMceState::EntrySendExtensionRequestL, Exit");
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMceState::EntrySendExtensionResponseL
+// -----------------------------------------------------------------------------
+//
+void CMceState::EntrySendExtensionResponseL( TMceStateTransitionEvent& aEvent )
+ {
+ MCESRV_DEBUG("CMceState::EntrySendExtensionResponseL, Entryt");
+ CMceSipSession& session = aEvent.Session();
+
+ session.Actions().SendExtensionResponseL( aEvent.ParamClientMessage(),
+ aEvent.ParamIDs() );
+
+ MCESRV_DEBUG("CMceState::EntrySendExtensionResponseL, Exit");
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMceState::EntryReceiveExtensionRequestL
+// -----------------------------------------------------------------------------
+//
+void CMceState::EntryReceiveExtensionRequestL( TMceStateTransitionEvent& aEvent )
+ {
+ MCESRV_DEBUG("CMceState::EntryReceiveExtensionRequestL, Entryt");
+ CMceSipSession& session = aEvent.Session();
+
+ session.Actions().ReceiveExtensionRequestL( aEvent );
+
+ MCESRV_DEBUG("CMceState::EntryReceiveExtensionRequestL, Exit");
+
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CMceState::EntryReceiveExtensionResponseL
+// -----------------------------------------------------------------------------
+//
+void CMceState::EntryReceiveExtensionResponseL( TMceStateTransitionEvent& aEvent )
+ {
+ MCESRV_DEBUG("CMceState::EntryReceiveExtensionResponseL, Entryt");
+ CMceSipSession& session = aEvent.Session();
+
+
+ if (( session.Dialog()->Dialog().State() != CSIPDialog::EInit ) &&
+ ( session.Dialog()->Dialog().State() != CSIPDialog::ETerminated ))
+
+ {
+ session.Actions().ReceiveExtensionResponseL( session.Response(), *session.Body() );
+ }
+
+ else
+ {
+ User::Leave( KErrTotalLossOfPrecision );
+ }
+
+ MCESRV_DEBUG("CMceState::EntryReceiveExtensionResponseL, Exit");
+ }
+
+
+
+// End of File
+