telephonyprotocols/csdagt/src/Nd_dlinStates.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyprotocols/csdagt/src/Nd_dlinStates.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyprotocols/csdagt/src/Nd_dlinStates.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,618 +1,618 @@
-// Copyright (c) 2003-2009 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:
-// Dial In States
-// 
-//
-
-/**
- @file Nd_dlinstates.cpp 
-*/
-
-#include "ND_DLIN.H"
-#include "Nd_dlinStates.h"
-#include "SLOGGER.H"
-#include <comms-infras/eventlogger.h>
-#include <csdprog.h>
-#include "ND_DBACC.H"
-#include "Nd_CallBack.h"
-
-const TInt KDefaultCallBackTimeMicroSec=90000000;		//< 1.5 minutes
-
-CDlInInit* CDlInInit::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-/**
-Initial State Definition
-
-2 phased constructor for CDlInInit, first phase.
-
-@param aSMObserver a reference to state machine observer.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-@exception Leaves if ConstructL() leaves, or not enough memory is available.
-@return a new CDlInInit object.
-*/
-	{
-	CDlInInit* r=new(ELeave) CDlInInit(aSMObserver, aNdEnv);
-	CleanupStack::PushL(r);
-	r->ConstructL();
-	CleanupStack::Pop();
-	return r;
-	}
-
-CDlInInit::~CDlInInit()
-/**
-Destructor.
-Cancel active request.
-*/
-	{
-	Cancel();
-	}
-
-CDlInInit::CDlInInit(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
-/**
-Private constructor for CDlInInit, used in the first phase of construction.
-
-@param aSMObserver a reference to the database accessor.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-*/
-	{}
-
-void CDlInInit::ConstructL()
-/**
-Instantiate Member variable.
-*/
-	{}
-
-void CDlInInit::StartState()
-/**
-Starts dial in init state.
-Call JumpToRunl() with KErrNone.
-*/
-	{
-	JumpToRunl(KErrNone);
-	}
-
-CAgentStateBase* CDlInInit::NextStateL(TBool aContinue)
-/**
-Changes to from init state to next state.
-If connection is not continued and iStatus is not KErrNone, create disconnect state.
-Else create answering state.
-
-@exception Leaves if NewL() leaves.
-@return a new CDlInDisconnect or CDlInAnswering object.
-*/
-	{
-	if(!aContinue||(iStatus!=KErrNone))
-		{
-		return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
-		}
-	else
-		{
-		return CDlInAnswering::NewL(*iSMObserver, *iNdEnv);
-		}
-	}
-
-void CDlInInit::DoCancel()
-/**
-Cancels active requests.
-*/
-	{
-	}
-
-void CDlInInit::RunL()
-/**
-Dial in init completed.
-Call CompleteState() with iStatus.Int().
-*/
-	{
-	__ASSERT_DEBUG(iStatus==KErrNone, User::Invariant());
-	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
-	}
-
-CDlInAnswering* CDlInAnswering::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-/**
-Answering State Definition
-
-2 phased constructor for CDlInAnswering, first phase.
-
-@param aSMObserver a reference to state machine observer.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-@exception Leaves if ConstructL() leaves, or not enough memory is available.
-@return a new CDlInAnswering object.
-*/
-	{
-	CDlInAnswering* r=new(ELeave) CDlInAnswering(aSMObserver, aNdEnv);
-	CleanupStack::PushL(r);
-	r->ConstructL();
-	CleanupStack::Pop();
-	return r;
-	}
-
-CDlInAnswering::~CDlInAnswering()
-/**
-Destructor.
-Cancel active request.
-*/
-	{
-	Cancel();
-	}
-
-CDlInAnswering::CDlInAnswering(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-	: CNdCallBackStateBase(aSMObserver),iNdEnv(&aNdEnv)
-/**
-Private constructor for CDlInAnswering, used in the first phase of construction.
-
-@param aSMObserver a reference to the database accessor.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-*/
-	{}
-
-void CDlInAnswering::ConstructL()
-/**
-Instantiate Member variable.
-Call CNdCallBackStateBase::ConstructL().
-*/
-	{
-	CNdCallBackStateBase::ConstructL();
-	}
-
-void CDlInAnswering::StartState()
-/**
-Starts dial in answering state.
-Call UpdateProgress() with ECsdStartingAnswer and KErrNone.
-If call back is used, get call back timeout and start call back timer.
-Call WaitForIncomingCallL() from ETel server processor.
-If WaitForIncomingCallL() leaves, trap it and call JumpToRunl() with the leave error.
-Else set state active.
-*/
-	{
-	iSMObserver->UpdateProgress(ECsdStartingAnswer,KErrNone);
-
-	if ((iNdEnv->BaseEnv())->CallBack())
-		{
-		TUint32 temp;
-		TInt ret=(iNdEnv->NetDialDb())->GetCallbackTimeout(temp);
-		TTimeIntervalMicroSeconds32 timer;
-		if (ret!=KErrNone)
-			timer=KDefaultCallBackTimeMicroSec;
-		else
-			timer=temp;
-		iCallBackTimer->Start(timer);
-		}
-
-	TRAPD(err,(iNdEnv->TelServPrc())->WaitForIncomingCallL(*this));
-	if(err!=KErrNone)
-		{
-		JumpToRunl(err);
-		return;
-		}
-	else
-		{
-		iStatus=KRequestPending;
-		SetActive();
-		}
-	}
-
-CAgentStateBase* CDlInAnswering::NextStateL(TBool aContinue)
-/**
-Changes to from answering state to next state.
-If connection is not continued and iStatus is not KErrNone, create hangup state.
-Else if connection is not accepted, create answering state.
-Else create log call start state.
-
-@exception Leaves if NewL() leaves.
-@return a new CDlInHangUp, CDlInAnswering or CDlInLogCallStart object.
-*/
-	{
-	if(!aContinue||(iStatus!=KErrNone))
-		{
-		return CDlInHangUp::NewL(*iSMObserver, *iNdEnv);
-		}
-	else if (!iConnectionAccepted)
-		{
-		return CDlInAnswering::NewL(*iSMObserver, *iNdEnv);
-		}
-	else //succesful run of state
-		{
-		TBuf<KCommsDbSvrMaxFieldLength> remoteParty;
-		iNdEnv->NetDialDb()->GetRemoteParty(remoteParty);
-		iNdEnv->Logger()->LogDataAddEvent(R_LOG_CON_CONNECTED, remoteParty,R_LOG_DIR_IN,KNullDesC, KLogDataEventTypeUid);
-		return CDlInOpen::NewL(*iSMObserver, *iNdEnv);
-		}
-	}
-
-void CDlInAnswering::TelFunctionComplete(TInt aError)
-/**
-Dial in answer TelFunctionComplete.
-Complete state with aError.
-
-@param aError identifies the error code for completition.
-*/
-	{
-	TRequestStatus* status=&iStatus;
-	User::RequestComplete(status,aError);
-	}
-
-void CDlInAnswering::RunL()
-/**
-Dial in answer completed (should not complete if connection cancelled).
-If there is an error then signal it, otherwise advance phase.
-Answer is always asynchronous, so should never complete when cancelled
-*/
-	{
-	if ((NULL != iNdEnv->TelServPrc()) && (iStatus==KErrTimedOut))	// timer went off before call received
-		(iNdEnv->TelServPrc())->Cancel();
-	if (iCallBackTimer!=NULL)
-		iCallBackTimer->Cancel();
-	
-	if(iStatus!=KErrNone)
-		{
-		__FLOG_STMT(_LIT(logString3,"Answering");)
-		__FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(KCompletedPhaseLogString()), &logString3(), iStatus.Int());
-		}
-	else
-		{
-		TInt err=KErrNone;
-		iConnectionAccepted=ETrue;
-		if (!(iNdEnv->BaseEnv())->CallBack())
-			err=iSMObserver->IncomingConnectionReceived();		
-		if (err==KErrNone)
-			{
-			iSMObserver->UpdateProgress(ECsdAnswered,KErrNone);
-			iSMObserver->ServiceStarted();
-			}
-		else
-			{
-			iConnectionAccepted=EFalse;
-			}
-		}
-	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
-	}
-
-void CDlInAnswering::DoCancel()
-/**
-Cancels active requests.
-*/
-	{	
-
-	if ((iNdEnv->TelServPrc())!=NULL)
-		(iNdEnv->TelServPrc())->Cancel();
-	iCallBackTimer->Cancel();
-	if(iStatus==KRequestPending)
-		{
-		TelFunctionComplete(KErrCancel);
-		}
-	}
-
-CDlInOpen* CDlInOpen::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-/**
-Open State Definition
-
-2 phased constructor for CDlInOpen, first phase.
-
-@param aSMObserver a reference to state machine observer.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-@exception Leaves if ConstructL() leaves, or not enough memory is available.
-@return a new CDlInOpen object.
-*/
-	{
-	CDlInOpen* r=new(ELeave) CDlInOpen(aSMObserver, aNdEnv);
-	CleanupStack::PushL(r);
-	r->ConstructL();
-	CleanupStack::Pop();
-	return r;
-	}
-
-CDlInOpen::CDlInOpen(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
-/**
-Private constructor for CDlInOpen, used in the first phase of construction.
-
-@param aSMObserver a reference to the database accessor.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-*/
-	{}
-
-CDlInOpen::~CDlInOpen()
-/**
-Destructor.
-Cancel active request.
-*/
-	{
-	Cancel();
-	}
-
-void CDlInOpen::ConstructL()
-/**
-Instantiate Member variable.
-*/
-	{}
-
-void CDlInOpen::StartState()
-/**
-Starts dial in open state.
-Request COMM-port from ETEL, trap possible leave.
-Call JumpToRunl with error code from requesting COMM-port.
-*/
-	{
-	RCall::TCommPort commPort;
-	TRAPD(err,(iNdEnv->TelServPrc())->GetCommPortL(commPort));
-	JumpToRunl(err);
-	}
-
-CAgentStateBase* CDlInOpen::NextStateL(TBool aContinue)
-/**
-Changes to from log call start state to next state.
-HangUp will be the next state whether or not a client has requested a connection cancel
-unless connection is lost on a callback connection. In which case a reconnection
-must be attempted, therefore return to dial up SM and redial.
-If connection is continued, create dialup init state.
-Else create hangup state.
-
-@exception Leaves if NewL() leaves.
-@return a new CDlUpInit or CDlInHangUp object.
-*/
-	{
-	if(aContinue)
-		{
-		// Redial the server to get it to do callback again
-		return CDlUpInit::NewL(*iSMObserver,*iNdEnv);
-		}
-	else
-		{
-		// HangUp will be the next state whether or not a client has requested a connection cancel
-		return CDlInHangUp::NewL(*iSMObserver, *iNdEnv);
-		}
-	}
-
-void CDlInOpen::DoCancel()
-/**
-Cancels active requests.
-*/
-	{
-	}
-
-void CDlInOpen::RunL()
-/**
-Dial in open start completed.
-Call ConnectionComplete() with EConnectionOpen and iStatus.Int().
-*/
-	{
-	__FLOG_STMT(_LIT8(logString,"NetDial:\tConnection Open");)
-	__FLOG_STATIC(KNetDialLogFolder(),KNetDialLogFile(),logString());
-	iSMObserver->ConnectionComplete(ECsdConnectionOpen,iStatus.Int());
-	}
-
-CDlInDisconnect* CDlInDisconnect::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-/**
-Disconnect State Definition
-
-2 phased constructor for CDlInDisconnect, first phase.
-
-@param aSMObserver a reference to state machine observer.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-@exception Leaves if ConstructL() leaves, or not enough memory is available.
-@return a new CDlInDisconnect object.
-*/
-	{
-	CDlInDisconnect* r=new(ELeave) CDlInDisconnect(aSMObserver, aNdEnv);
-	CleanupStack::PushL(r);
-	r->ConstructL();
-	CleanupStack::Pop();
-	return r;
-	}
-
-CDlInDisconnect::CDlInDisconnect(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
-/**
-Private constructor for CDlInDisconnect, used in the first phase of construction.
-
-@param aSMObserver a reference to the database accessor.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-*/
-	{}
-
-void CDlInDisconnect::ConstructL()
-/**
-Instantiate Member variable.
-*/
-	{}
-
-CDlInDisconnect::~CDlInDisconnect()
-/**
-Destructor.
-Cancel active request.
-*/
-	{
-	Cancel();
-	}
-
-void CDlInDisconnect::StartState()
-/**
-Starts dial in disconnect state.
-If ETel server processor is used, close it and possible opened objects.
-Call JumpToRunl with KErrNone.
-*/
-	{
-	if ((iNdEnv->TelServPrc())!=NULL)
-		(iNdEnv->TelServPrc())->CloseCall();
-	
-	// We need to make sure that logging is finished before closing everything.
-	// forward iStatus to the logger, which will be responsible to complete iStatus when it is finished.
-	iStatus = KRequestPending;
-	iNdEnv->Logger()->LogDataNotifyLastEventUpdate(&iStatus);
-	SetActive();
-	}
-
-CAgentStateBase* CDlInDisconnect::NextStateL(TBool /*aContinue*/)
-/**
-Returns the same disconnect state.
-
-@exception Leaves if NewL() leaves.
-@return a new CDlInDisconnect object.
-*/
-	{
-	return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
-	}
-
-void CDlInDisconnect::DoCancel()
-/**
-Cancels active requests.
-*/
-	{
-	}
-
-void CDlInDisconnect::RunL()
-/**
-Dial in disconnect completed.
-Call DisconnectComplete().
-*/
-	{
-	__FLOG_STMT(_LIT8(logString,"NetDial:\tDisconnect Complete");)
-	__FLOG_STATIC(KNetDialLogFolder(),KNetDialLogFile(),logString());
-	
-	iSMObserver->DisconnectComplete();
-	}
-
-CDlInHangUp* CDlInHangUp::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-/**
-Hangup State Definition
-
-2 phased constructor for CDlInHangUp, first phase.
-
-@param aSMObserver a reference to state machine observer.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-@exception Leaves if ConstructL() leaves, or not enough memory is available.
-@return a new CDlInHangUp object.
-*/
-	{
-	CDlInHangUp* r=new(ELeave) CDlInHangUp(aSMObserver, aNdEnv);
-	CleanupStack::PushL(r);
-	r->ConstructL();
-	CleanupStack::Pop();
-	return r;
-	}
-
-CDlInHangUp::CDlInHangUp(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
-	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
-/**
-Private constructor for CDlInHangUp, used in the first phase of construction.
-
-@param aSMObserver a reference to the database accessor.
-@param aNdEnv a reference to the Netdial which defines a set of utility functions.
-*/
-	{}
-
-void CDlInHangUp::ConstructL()
-/**
-Instantiate Member variable.
-*/
-	{}
-
-CDlInHangUp::~CDlInHangUp()
-/**
-Destructor.
-Cancel active request.
-*/
-	{
-	Cancel();
-	}
-
-void CDlInHangUp::StartState()
-/**
-Starts dial in hangup state.
-Call UpdateProgress with ECsdStartingHangUp and KErrNone.
-If COMM-port is loaned, return port to ETEL.
-If returning of COMM-port leaves, trap error and call JumpToRunl with error.
-If call is active, start hangup and set state active.
-Else call JumpToRunl() with KErrNone.
-*/
-	{
-	iSMObserver->UpdateProgress(ECsdStartingHangUp,KErrNone);
-
-	if (iNdEnv->TelServPrc()->CommPortLoaned())
-		{
-		// returns ownership of the comm port to ETEL
-		TRAPD(err,(iNdEnv->TelServPrc())->ReturnCommPortL());
-		if(err!=KErrNone)
-			{
-			JumpToRunl(err);
-			return;
-			}
-		}
-
-	if (iNdEnv->TelServPrc()->CallActive())
-		{
-		(iNdEnv->TelServPrc())->StartHangUpAfterDialIn(*this);
-		iStatus=KRequestPending;
-		SetActive();
-		}
-	else
-		JumpToRunl(KErrNone);
-	}
-
-CAgentStateBase* CDlInHangUp::NextStateL(TBool /*aContinue*/)
-/**
-Changes to from init state to next state.
-Disconnect will be the next state whether or not a client has requested a connection cancel.
-Create disconnect state.
-
-@exception Leaves if NewL() leaves.
-@return a new CDlInDisconnect object.
-*/
-	{
-	return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
-	}
-
-void CDlInHangUp::TelFunctionComplete(TInt aError)
-/**
-Dial in hangup TelFunctionComplete.
-Complete state with aError.
-
-@param aError identifies the error code for completition.
-*/
-	{
-	TRequestStatus* status=&iStatus;
-	User::RequestComplete(status,aError);
-	}
-
-void CDlInHangUp::DoCancel()
-/**
-Cancels active requests.
-*/
-	{
-	if((iNdEnv->TelServPrc())!=NULL)
-		(iNdEnv->TelServPrc())->Cancel();
-	if(iStatus==KRequestPending)
-		{
-		TelFunctionComplete(KErrCancel);
-		}
-	}
-
-void CDlInHangUp::RunL()
-/**
-Dial in hangup completed.
-If there is an error then signal it, otherwise advance phase 
-Hangup is always asynchronous, so it should never complete when cancelled.
-*/
-	{
-	//update the log object
-	iNdEnv->Logger()->LogDataUpdateEvent(R_LOG_CON_DISCONNECTED, KLogDataEventTypeUid);
-	if(iStatus!=KErrNone)
-		{
-		__FLOG_STMT(_LIT(logString3,"Hanging Up");)
-		__FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(KCompletedPhaseLogString()), &logString3(), iStatus.Int());
-		}
-	iSMObserver->UpdateProgress(ECsdFinishedHangUp,KErrNone);
-	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
-	}
+// Copyright (c) 2003-2009 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:
+// Dial In States
+// 
+//
+
+/**
+ @file Nd_dlinstates.cpp 
+*/
+
+#include "ND_DLIN.H"
+#include "Nd_dlinStates.h"
+#include "SLOGGER.H"
+#include <comms-infras/eventlogger.h>
+#include <csdprog.h>
+#include "ND_DBACC.H"
+#include "Nd_CallBack.h"
+
+const TInt KDefaultCallBackTimeMicroSec=90000000;		//< 1.5 minutes
+
+CDlInInit* CDlInInit::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+/**
+Initial State Definition
+
+2 phased constructor for CDlInInit, first phase.
+
+@param aSMObserver a reference to state machine observer.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CDlInInit object.
+*/
+	{
+	CDlInInit* r=new(ELeave) CDlInInit(aSMObserver, aNdEnv);
+	CleanupStack::PushL(r);
+	r->ConstructL();
+	CleanupStack::Pop();
+	return r;
+	}
+
+CDlInInit::~CDlInInit()
+/**
+Destructor.
+Cancel active request.
+*/
+	{
+	Cancel();
+	}
+
+CDlInInit::CDlInInit(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
+/**
+Private constructor for CDlInInit, used in the first phase of construction.
+
+@param aSMObserver a reference to the database accessor.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+*/
+	{}
+
+void CDlInInit::ConstructL()
+/**
+Instantiate Member variable.
+*/
+	{}
+
+void CDlInInit::StartState()
+/**
+Starts dial in init state.
+Call JumpToRunl() with KErrNone.
+*/
+	{
+	JumpToRunl(KErrNone);
+	}
+
+CAgentStateBase* CDlInInit::NextStateL(TBool aContinue)
+/**
+Changes to from init state to next state.
+If connection is not continued and iStatus is not KErrNone, create disconnect state.
+Else create answering state.
+
+@exception Leaves if NewL() leaves.
+@return a new CDlInDisconnect or CDlInAnswering object.
+*/
+	{
+	if(!aContinue||(iStatus!=KErrNone))
+		{
+		return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
+		}
+	else
+		{
+		return CDlInAnswering::NewL(*iSMObserver, *iNdEnv);
+		}
+	}
+
+void CDlInInit::DoCancel()
+/**
+Cancels active requests.
+*/
+	{
+	}
+
+void CDlInInit::RunL()
+/**
+Dial in init completed.
+Call CompleteState() with iStatus.Int().
+*/
+	{
+	__ASSERT_DEBUG(iStatus==KErrNone, User::Invariant());
+	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
+	}
+
+CDlInAnswering* CDlInAnswering::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+/**
+Answering State Definition
+
+2 phased constructor for CDlInAnswering, first phase.
+
+@param aSMObserver a reference to state machine observer.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CDlInAnswering object.
+*/
+	{
+	CDlInAnswering* r=new(ELeave) CDlInAnswering(aSMObserver, aNdEnv);
+	CleanupStack::PushL(r);
+	r->ConstructL();
+	CleanupStack::Pop();
+	return r;
+	}
+
+CDlInAnswering::~CDlInAnswering()
+/**
+Destructor.
+Cancel active request.
+*/
+	{
+	Cancel();
+	}
+
+CDlInAnswering::CDlInAnswering(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+	: CNdCallBackStateBase(aSMObserver),iNdEnv(&aNdEnv)
+/**
+Private constructor for CDlInAnswering, used in the first phase of construction.
+
+@param aSMObserver a reference to the database accessor.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+*/
+	{}
+
+void CDlInAnswering::ConstructL()
+/**
+Instantiate Member variable.
+Call CNdCallBackStateBase::ConstructL().
+*/
+	{
+	CNdCallBackStateBase::ConstructL();
+	}
+
+void CDlInAnswering::StartState()
+/**
+Starts dial in answering state.
+Call UpdateProgress() with ECsdStartingAnswer and KErrNone.
+If call back is used, get call back timeout and start call back timer.
+Call WaitForIncomingCallL() from ETel server processor.
+If WaitForIncomingCallL() leaves, trap it and call JumpToRunl() with the leave error.
+Else set state active.
+*/
+	{
+	iSMObserver->UpdateProgress(ECsdStartingAnswer,KErrNone);
+
+	if ((iNdEnv->BaseEnv())->CallBack())
+		{
+		TUint32 temp;
+		TInt ret=(iNdEnv->NetDialDb())->GetCallbackTimeout(temp);
+		TTimeIntervalMicroSeconds32 timer;
+		if (ret!=KErrNone)
+			timer=KDefaultCallBackTimeMicroSec;
+		else
+			timer=temp;
+		iCallBackTimer->Start(timer);
+		}
+
+	TRAPD(err,(iNdEnv->TelServPrc())->WaitForIncomingCallL(*this));
+	if(err!=KErrNone)
+		{
+		JumpToRunl(err);
+		return;
+		}
+	else
+		{
+		iStatus=KRequestPending;
+		SetActive();
+		}
+	}
+
+CAgentStateBase* CDlInAnswering::NextStateL(TBool aContinue)
+/**
+Changes to from answering state to next state.
+If connection is not continued and iStatus is not KErrNone, create hangup state.
+Else if connection is not accepted, create answering state.
+Else create log call start state.
+
+@exception Leaves if NewL() leaves.
+@return a new CDlInHangUp, CDlInAnswering or CDlInLogCallStart object.
+*/
+	{
+	if(!aContinue||(iStatus!=KErrNone))
+		{
+		return CDlInHangUp::NewL(*iSMObserver, *iNdEnv);
+		}
+	else if (!iConnectionAccepted)
+		{
+		return CDlInAnswering::NewL(*iSMObserver, *iNdEnv);
+		}
+	else //succesful run of state
+		{
+		TBuf<KCommsDbSvrMaxFieldLength> remoteParty;
+		iNdEnv->NetDialDb()->GetRemoteParty(remoteParty);
+		iNdEnv->Logger()->LogDataAddEvent(R_LOG_CON_CONNECTED, remoteParty,R_LOG_DIR_IN,KNullDesC, KLogDataEventTypeUid);
+		return CDlInOpen::NewL(*iSMObserver, *iNdEnv);
+		}
+	}
+
+void CDlInAnswering::TelFunctionComplete(TInt aError)
+/**
+Dial in answer TelFunctionComplete.
+Complete state with aError.
+
+@param aError identifies the error code for completition.
+*/
+	{
+	TRequestStatus* status=&iStatus;
+	User::RequestComplete(status,aError);
+	}
+
+void CDlInAnswering::RunL()
+/**
+Dial in answer completed (should not complete if connection cancelled).
+If there is an error then signal it, otherwise advance phase.
+Answer is always asynchronous, so should never complete when cancelled
+*/
+	{
+	if ((NULL != iNdEnv->TelServPrc()) && (iStatus==KErrTimedOut))	// timer went off before call received
+		(iNdEnv->TelServPrc())->Cancel();
+	if (iCallBackTimer!=NULL)
+		iCallBackTimer->Cancel();
+	
+	if(iStatus!=KErrNone)
+		{
+		__FLOG_STMT(_LIT(logString3,"Answering");)
+		__FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(KCompletedPhaseLogString()), &logString3(), iStatus.Int());
+		}
+	else
+		{
+		TInt err=KErrNone;
+		iConnectionAccepted=ETrue;
+		if (!(iNdEnv->BaseEnv())->CallBack())
+			err=iSMObserver->IncomingConnectionReceived();		
+		if (err==KErrNone)
+			{
+			iSMObserver->UpdateProgress(ECsdAnswered,KErrNone);
+			iSMObserver->ServiceStarted();
+			}
+		else
+			{
+			iConnectionAccepted=EFalse;
+			}
+		}
+	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
+	}
+
+void CDlInAnswering::DoCancel()
+/**
+Cancels active requests.
+*/
+	{	
+
+	if ((iNdEnv->TelServPrc())!=NULL)
+		(iNdEnv->TelServPrc())->Cancel();
+	iCallBackTimer->Cancel();
+	if(iStatus==KRequestPending)
+		{
+		TelFunctionComplete(KErrCancel);
+		}
+	}
+
+CDlInOpen* CDlInOpen::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+/**
+Open State Definition
+
+2 phased constructor for CDlInOpen, first phase.
+
+@param aSMObserver a reference to state machine observer.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CDlInOpen object.
+*/
+	{
+	CDlInOpen* r=new(ELeave) CDlInOpen(aSMObserver, aNdEnv);
+	CleanupStack::PushL(r);
+	r->ConstructL();
+	CleanupStack::Pop();
+	return r;
+	}
+
+CDlInOpen::CDlInOpen(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
+/**
+Private constructor for CDlInOpen, used in the first phase of construction.
+
+@param aSMObserver a reference to the database accessor.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+*/
+	{}
+
+CDlInOpen::~CDlInOpen()
+/**
+Destructor.
+Cancel active request.
+*/
+	{
+	Cancel();
+	}
+
+void CDlInOpen::ConstructL()
+/**
+Instantiate Member variable.
+*/
+	{}
+
+void CDlInOpen::StartState()
+/**
+Starts dial in open state.
+Request COMM-port from ETEL, trap possible leave.
+Call JumpToRunl with error code from requesting COMM-port.
+*/
+	{
+	RCall::TCommPort commPort;
+	TRAPD(err,(iNdEnv->TelServPrc())->GetCommPortL(commPort));
+	JumpToRunl(err);
+	}
+
+CAgentStateBase* CDlInOpen::NextStateL(TBool aContinue)
+/**
+Changes to from log call start state to next state.
+HangUp will be the next state whether or not a client has requested a connection cancel
+unless connection is lost on a callback connection. In which case a reconnection
+must be attempted, therefore return to dial up SM and redial.
+If connection is continued, create dialup init state.
+Else create hangup state.
+
+@exception Leaves if NewL() leaves.
+@return a new CDlUpInit or CDlInHangUp object.
+*/
+	{
+	if(aContinue)
+		{
+		// Redial the server to get it to do callback again
+		return CDlUpInit::NewL(*iSMObserver,*iNdEnv);
+		}
+	else
+		{
+		// HangUp will be the next state whether or not a client has requested a connection cancel
+		return CDlInHangUp::NewL(*iSMObserver, *iNdEnv);
+		}
+	}
+
+void CDlInOpen::DoCancel()
+/**
+Cancels active requests.
+*/
+	{
+	}
+
+void CDlInOpen::RunL()
+/**
+Dial in open start completed.
+Call ConnectionComplete() with EConnectionOpen and iStatus.Int().
+*/
+	{
+	__FLOG_STMT(_LIT8(logString,"NetDial:\tConnection Open");)
+	__FLOG_STATIC(KNetDialLogFolder(),KNetDialLogFile(),logString());
+	iSMObserver->ConnectionComplete(ECsdConnectionOpen,iStatus.Int());
+	}
+
+CDlInDisconnect* CDlInDisconnect::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+/**
+Disconnect State Definition
+
+2 phased constructor for CDlInDisconnect, first phase.
+
+@param aSMObserver a reference to state machine observer.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CDlInDisconnect object.
+*/
+	{
+	CDlInDisconnect* r=new(ELeave) CDlInDisconnect(aSMObserver, aNdEnv);
+	CleanupStack::PushL(r);
+	r->ConstructL();
+	CleanupStack::Pop();
+	return r;
+	}
+
+CDlInDisconnect::CDlInDisconnect(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
+/**
+Private constructor for CDlInDisconnect, used in the first phase of construction.
+
+@param aSMObserver a reference to the database accessor.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+*/
+	{}
+
+void CDlInDisconnect::ConstructL()
+/**
+Instantiate Member variable.
+*/
+	{}
+
+CDlInDisconnect::~CDlInDisconnect()
+/**
+Destructor.
+Cancel active request.
+*/
+	{
+	Cancel();
+	}
+
+void CDlInDisconnect::StartState()
+/**
+Starts dial in disconnect state.
+If ETel server processor is used, close it and possible opened objects.
+Call JumpToRunl with KErrNone.
+*/
+	{
+	if ((iNdEnv->TelServPrc())!=NULL)
+		(iNdEnv->TelServPrc())->CloseCall();
+	
+	// We need to make sure that logging is finished before closing everything.
+	// forward iStatus to the logger, which will be responsible to complete iStatus when it is finished.
+	iStatus = KRequestPending;
+	iNdEnv->Logger()->LogDataNotifyLastEventUpdate(&iStatus);
+	SetActive();
+	}
+
+CAgentStateBase* CDlInDisconnect::NextStateL(TBool /*aContinue*/)
+/**
+Returns the same disconnect state.
+
+@exception Leaves if NewL() leaves.
+@return a new CDlInDisconnect object.
+*/
+	{
+	return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
+	}
+
+void CDlInDisconnect::DoCancel()
+/**
+Cancels active requests.
+*/
+	{
+	}
+
+void CDlInDisconnect::RunL()
+/**
+Dial in disconnect completed.
+Call DisconnectComplete().
+*/
+	{
+	__FLOG_STMT(_LIT8(logString,"NetDial:\tDisconnect Complete");)
+	__FLOG_STATIC(KNetDialLogFolder(),KNetDialLogFile(),logString());
+	
+	iSMObserver->DisconnectComplete();
+	}
+
+CDlInHangUp* CDlInHangUp::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+/**
+Hangup State Definition
+
+2 phased constructor for CDlInHangUp, first phase.
+
+@param aSMObserver a reference to state machine observer.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CDlInHangUp object.
+*/
+	{
+	CDlInHangUp* r=new(ELeave) CDlInHangUp(aSMObserver, aNdEnv);
+	CleanupStack::PushL(r);
+	r->ConstructL();
+	CleanupStack::Pop();
+	return r;
+	}
+
+CDlInHangUp::CDlInHangUp(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
+	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
+/**
+Private constructor for CDlInHangUp, used in the first phase of construction.
+
+@param aSMObserver a reference to the database accessor.
+@param aNdEnv a reference to the Netdial which defines a set of utility functions.
+*/
+	{}
+
+void CDlInHangUp::ConstructL()
+/**
+Instantiate Member variable.
+*/
+	{}
+
+CDlInHangUp::~CDlInHangUp()
+/**
+Destructor.
+Cancel active request.
+*/
+	{
+	Cancel();
+	}
+
+void CDlInHangUp::StartState()
+/**
+Starts dial in hangup state.
+Call UpdateProgress with ECsdStartingHangUp and KErrNone.
+If COMM-port is loaned, return port to ETEL.
+If returning of COMM-port leaves, trap error and call JumpToRunl with error.
+If call is active, start hangup and set state active.
+Else call JumpToRunl() with KErrNone.
+*/
+	{
+	iSMObserver->UpdateProgress(ECsdStartingHangUp,KErrNone);
+
+	if (iNdEnv->TelServPrc()->CommPortLoaned())
+		{
+		// returns ownership of the comm port to ETEL
+		TRAPD(err,(iNdEnv->TelServPrc())->ReturnCommPortL());
+		if(err!=KErrNone)
+			{
+			JumpToRunl(err);
+			return;
+			}
+		}
+
+	if (iNdEnv->TelServPrc()->CallActive())
+		{
+		(iNdEnv->TelServPrc())->StartHangUpAfterDialIn(*this);
+		iStatus=KRequestPending;
+		SetActive();
+		}
+	else
+		JumpToRunl(KErrNone);
+	}
+
+CAgentStateBase* CDlInHangUp::NextStateL(TBool /*aContinue*/)
+/**
+Changes to from init state to next state.
+Disconnect will be the next state whether or not a client has requested a connection cancel.
+Create disconnect state.
+
+@exception Leaves if NewL() leaves.
+@return a new CDlInDisconnect object.
+*/
+	{
+	return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
+	}
+
+void CDlInHangUp::TelFunctionComplete(TInt aError)
+/**
+Dial in hangup TelFunctionComplete.
+Complete state with aError.
+
+@param aError identifies the error code for completition.
+*/
+	{
+	TRequestStatus* status=&iStatus;
+	User::RequestComplete(status,aError);
+	}
+
+void CDlInHangUp::DoCancel()
+/**
+Cancels active requests.
+*/
+	{
+	if((iNdEnv->TelServPrc())!=NULL)
+		(iNdEnv->TelServPrc())->Cancel();
+	if(iStatus==KRequestPending)
+		{
+		TelFunctionComplete(KErrCancel);
+		}
+	}
+
+void CDlInHangUp::RunL()
+/**
+Dial in hangup completed.
+If there is an error then signal it, otherwise advance phase 
+Hangup is always asynchronous, so it should never complete when cancelled.
+*/
+	{
+	//update the log object
+	iNdEnv->Logger()->LogDataUpdateEvent(R_LOG_CON_DISCONNECTED, KLogDataEventTypeUid);
+	if(iStatus!=KErrNone)
+		{
+		__FLOG_STMT(_LIT(logString3,"Hanging Up");)
+		__FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(KCompletedPhaseLogString()), &logString3(), iStatus.Int());
+		}
+	iSMObserver->UpdateProgress(ECsdFinishedHangUp,KErrNone);
+	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
+	}