telephonyprotocols/csdagt/src/Nd_dlinStates.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Dial In States
       
    15 // 
       
    16 //
       
    17 
       
    18 /**
       
    19  @file Nd_dlinstates.cpp 
       
    20 */
       
    21 
       
    22 #include "ND_DLIN.H"
       
    23 #include "Nd_dlinStates.h"
       
    24 #include "SLOGGER.H"
       
    25 #include <comms-infras/eventlogger.h>
       
    26 #include <csdprog.h>
       
    27 #include "ND_DBACC.H"
       
    28 #include "Nd_CallBack.h"
       
    29 
       
    30 const TInt KDefaultCallBackTimeMicroSec=90000000;		//< 1.5 minutes
       
    31 
       
    32 CDlInInit* CDlInInit::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
    33 /**
       
    34 Initial State Definition
       
    35 
       
    36 2 phased constructor for CDlInInit, first phase.
       
    37 
       
    38 @param aSMObserver a reference to state machine observer.
       
    39 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
    40 @exception Leaves if ConstructL() leaves, or not enough memory is available.
       
    41 @return a new CDlInInit object.
       
    42 */
       
    43 	{
       
    44 	CDlInInit* r=new(ELeave) CDlInInit(aSMObserver, aNdEnv);
       
    45 	CleanupStack::PushL(r);
       
    46 	r->ConstructL();
       
    47 	CleanupStack::Pop();
       
    48 	return r;
       
    49 	}
       
    50 
       
    51 CDlInInit::~CDlInInit()
       
    52 /**
       
    53 Destructor.
       
    54 Cancel active request.
       
    55 */
       
    56 	{
       
    57 	Cancel();
       
    58 	}
       
    59 
       
    60 CDlInInit::CDlInInit(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
    61 	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
       
    62 /**
       
    63 Private constructor for CDlInInit, used in the first phase of construction.
       
    64 
       
    65 @param aSMObserver a reference to the database accessor.
       
    66 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
    67 */
       
    68 	{}
       
    69 
       
    70 void CDlInInit::ConstructL()
       
    71 /**
       
    72 Instantiate Member variable.
       
    73 */
       
    74 	{}
       
    75 
       
    76 void CDlInInit::StartState()
       
    77 /**
       
    78 Starts dial in init state.
       
    79 Call JumpToRunl() with KErrNone.
       
    80 */
       
    81 	{
       
    82 	JumpToRunl(KErrNone);
       
    83 	}
       
    84 
       
    85 CAgentStateBase* CDlInInit::NextStateL(TBool aContinue)
       
    86 /**
       
    87 Changes to from init state to next state.
       
    88 If connection is not continued and iStatus is not KErrNone, create disconnect state.
       
    89 Else create answering state.
       
    90 
       
    91 @exception Leaves if NewL() leaves.
       
    92 @return a new CDlInDisconnect or CDlInAnswering object.
       
    93 */
       
    94 	{
       
    95 	if(!aContinue||(iStatus!=KErrNone))
       
    96 		{
       
    97 		return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
       
    98 		}
       
    99 	else
       
   100 		{
       
   101 		return CDlInAnswering::NewL(*iSMObserver, *iNdEnv);
       
   102 		}
       
   103 	}
       
   104 
       
   105 void CDlInInit::DoCancel()
       
   106 /**
       
   107 Cancels active requests.
       
   108 */
       
   109 	{
       
   110 	}
       
   111 
       
   112 void CDlInInit::RunL()
       
   113 /**
       
   114 Dial in init completed.
       
   115 Call CompleteState() with iStatus.Int().
       
   116 */
       
   117 	{
       
   118 	__ASSERT_DEBUG(iStatus==KErrNone, User::Invariant());
       
   119 	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
       
   120 	}
       
   121 
       
   122 CDlInAnswering* CDlInAnswering::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   123 /**
       
   124 Answering State Definition
       
   125 
       
   126 2 phased constructor for CDlInAnswering, first phase.
       
   127 
       
   128 @param aSMObserver a reference to state machine observer.
       
   129 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   130 @exception Leaves if ConstructL() leaves, or not enough memory is available.
       
   131 @return a new CDlInAnswering object.
       
   132 */
       
   133 	{
       
   134 	CDlInAnswering* r=new(ELeave) CDlInAnswering(aSMObserver, aNdEnv);
       
   135 	CleanupStack::PushL(r);
       
   136 	r->ConstructL();
       
   137 	CleanupStack::Pop();
       
   138 	return r;
       
   139 	}
       
   140 
       
   141 CDlInAnswering::~CDlInAnswering()
       
   142 /**
       
   143 Destructor.
       
   144 Cancel active request.
       
   145 */
       
   146 	{
       
   147 	Cancel();
       
   148 	}
       
   149 
       
   150 CDlInAnswering::CDlInAnswering(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   151 	: CNdCallBackStateBase(aSMObserver),iNdEnv(&aNdEnv)
       
   152 /**
       
   153 Private constructor for CDlInAnswering, used in the first phase of construction.
       
   154 
       
   155 @param aSMObserver a reference to the database accessor.
       
   156 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   157 */
       
   158 	{}
       
   159 
       
   160 void CDlInAnswering::ConstructL()
       
   161 /**
       
   162 Instantiate Member variable.
       
   163 Call CNdCallBackStateBase::ConstructL().
       
   164 */
       
   165 	{
       
   166 	CNdCallBackStateBase::ConstructL();
       
   167 	}
       
   168 
       
   169 void CDlInAnswering::StartState()
       
   170 /**
       
   171 Starts dial in answering state.
       
   172 Call UpdateProgress() with ECsdStartingAnswer and KErrNone.
       
   173 If call back is used, get call back timeout and start call back timer.
       
   174 Call WaitForIncomingCallL() from ETel server processor.
       
   175 If WaitForIncomingCallL() leaves, trap it and call JumpToRunl() with the leave error.
       
   176 Else set state active.
       
   177 */
       
   178 	{
       
   179 	iSMObserver->UpdateProgress(ECsdStartingAnswer,KErrNone);
       
   180 
       
   181 	if ((iNdEnv->BaseEnv())->CallBack())
       
   182 		{
       
   183 		TUint32 temp;
       
   184 		TInt ret=(iNdEnv->NetDialDb())->GetCallbackTimeout(temp);
       
   185 		TTimeIntervalMicroSeconds32 timer;
       
   186 		if (ret!=KErrNone)
       
   187 			timer=KDefaultCallBackTimeMicroSec;
       
   188 		else
       
   189 			timer=temp;
       
   190 		iCallBackTimer->Start(timer);
       
   191 		}
       
   192 
       
   193 	TRAPD(err,(iNdEnv->TelServPrc())->WaitForIncomingCallL(*this));
       
   194 	if(err!=KErrNone)
       
   195 		{
       
   196 		JumpToRunl(err);
       
   197 		return;
       
   198 		}
       
   199 	else
       
   200 		{
       
   201 		iStatus=KRequestPending;
       
   202 		SetActive();
       
   203 		}
       
   204 	}
       
   205 
       
   206 CAgentStateBase* CDlInAnswering::NextStateL(TBool aContinue)
       
   207 /**
       
   208 Changes to from answering state to next state.
       
   209 If connection is not continued and iStatus is not KErrNone, create hangup state.
       
   210 Else if connection is not accepted, create answering state.
       
   211 Else create log call start state.
       
   212 
       
   213 @exception Leaves if NewL() leaves.
       
   214 @return a new CDlInHangUp, CDlInAnswering or CDlInLogCallStart object.
       
   215 */
       
   216 	{
       
   217 	if(!aContinue||(iStatus!=KErrNone))
       
   218 		{
       
   219 		return CDlInHangUp::NewL(*iSMObserver, *iNdEnv);
       
   220 		}
       
   221 	else if (!iConnectionAccepted)
       
   222 		{
       
   223 		return CDlInAnswering::NewL(*iSMObserver, *iNdEnv);
       
   224 		}
       
   225 	else //succesful run of state
       
   226 		{
       
   227 		TBuf<KCommsDbSvrMaxFieldLength> remoteParty;
       
   228 		iNdEnv->NetDialDb()->GetRemoteParty(remoteParty);
       
   229 		iNdEnv->Logger()->LogDataAddEvent(R_LOG_CON_CONNECTED, remoteParty,R_LOG_DIR_IN,KNullDesC, KLogDataEventTypeUid);
       
   230 		return CDlInOpen::NewL(*iSMObserver, *iNdEnv);
       
   231 		}
       
   232 	}
       
   233 
       
   234 void CDlInAnswering::TelFunctionComplete(TInt aError)
       
   235 /**
       
   236 Dial in answer TelFunctionComplete.
       
   237 Complete state with aError.
       
   238 
       
   239 @param aError identifies the error code for completition.
       
   240 */
       
   241 	{
       
   242 	TRequestStatus* status=&iStatus;
       
   243 	User::RequestComplete(status,aError);
       
   244 	}
       
   245 
       
   246 void CDlInAnswering::RunL()
       
   247 /**
       
   248 Dial in answer completed (should not complete if connection cancelled).
       
   249 If there is an error then signal it, otherwise advance phase.
       
   250 Answer is always asynchronous, so should never complete when cancelled
       
   251 */
       
   252 	{
       
   253 	if ((NULL != iNdEnv->TelServPrc()) && (iStatus==KErrTimedOut))	// timer went off before call received
       
   254 		(iNdEnv->TelServPrc())->Cancel();
       
   255 	if (iCallBackTimer!=NULL)
       
   256 		iCallBackTimer->Cancel();
       
   257 	
       
   258 	if(iStatus!=KErrNone)
       
   259 		{
       
   260 		__FLOG_STMT(_LIT(logString3,"Answering");)
       
   261 		__FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(KCompletedPhaseLogString()), &logString3(), iStatus.Int());
       
   262 		}
       
   263 	else
       
   264 		{
       
   265 		TInt err=KErrNone;
       
   266 		iConnectionAccepted=ETrue;
       
   267 		if (!(iNdEnv->BaseEnv())->CallBack())
       
   268 			err=iSMObserver->IncomingConnectionReceived();		
       
   269 		if (err==KErrNone)
       
   270 			{
       
   271 			iSMObserver->UpdateProgress(ECsdAnswered,KErrNone);
       
   272 			iSMObserver->ServiceStarted();
       
   273 			}
       
   274 		else
       
   275 			{
       
   276 			iConnectionAccepted=EFalse;
       
   277 			}
       
   278 		}
       
   279 	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
       
   280 	}
       
   281 
       
   282 void CDlInAnswering::DoCancel()
       
   283 /**
       
   284 Cancels active requests.
       
   285 */
       
   286 	{	
       
   287 
       
   288 	if ((iNdEnv->TelServPrc())!=NULL)
       
   289 		(iNdEnv->TelServPrc())->Cancel();
       
   290 	iCallBackTimer->Cancel();
       
   291 	if(iStatus==KRequestPending)
       
   292 		{
       
   293 		TelFunctionComplete(KErrCancel);
       
   294 		}
       
   295 	}
       
   296 
       
   297 CDlInOpen* CDlInOpen::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   298 /**
       
   299 Open State Definition
       
   300 
       
   301 2 phased constructor for CDlInOpen, first phase.
       
   302 
       
   303 @param aSMObserver a reference to state machine observer.
       
   304 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   305 @exception Leaves if ConstructL() leaves, or not enough memory is available.
       
   306 @return a new CDlInOpen object.
       
   307 */
       
   308 	{
       
   309 	CDlInOpen* r=new(ELeave) CDlInOpen(aSMObserver, aNdEnv);
       
   310 	CleanupStack::PushL(r);
       
   311 	r->ConstructL();
       
   312 	CleanupStack::Pop();
       
   313 	return r;
       
   314 	}
       
   315 
       
   316 CDlInOpen::CDlInOpen(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   317 	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
       
   318 /**
       
   319 Private constructor for CDlInOpen, used in the first phase of construction.
       
   320 
       
   321 @param aSMObserver a reference to the database accessor.
       
   322 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   323 */
       
   324 	{}
       
   325 
       
   326 CDlInOpen::~CDlInOpen()
       
   327 /**
       
   328 Destructor.
       
   329 Cancel active request.
       
   330 */
       
   331 	{
       
   332 	Cancel();
       
   333 	}
       
   334 
       
   335 void CDlInOpen::ConstructL()
       
   336 /**
       
   337 Instantiate Member variable.
       
   338 */
       
   339 	{}
       
   340 
       
   341 void CDlInOpen::StartState()
       
   342 /**
       
   343 Starts dial in open state.
       
   344 Request COMM-port from ETEL, trap possible leave.
       
   345 Call JumpToRunl with error code from requesting COMM-port.
       
   346 */
       
   347 	{
       
   348 	RCall::TCommPort commPort;
       
   349 	TRAPD(err,(iNdEnv->TelServPrc())->GetCommPortL(commPort));
       
   350 	JumpToRunl(err);
       
   351 	}
       
   352 
       
   353 CAgentStateBase* CDlInOpen::NextStateL(TBool aContinue)
       
   354 /**
       
   355 Changes to from log call start state to next state.
       
   356 HangUp will be the next state whether or not a client has requested a connection cancel
       
   357 unless connection is lost on a callback connection. In which case a reconnection
       
   358 must be attempted, therefore return to dial up SM and redial.
       
   359 If connection is continued, create dialup init state.
       
   360 Else create hangup state.
       
   361 
       
   362 @exception Leaves if NewL() leaves.
       
   363 @return a new CDlUpInit or CDlInHangUp object.
       
   364 */
       
   365 	{
       
   366 	if(aContinue)
       
   367 		{
       
   368 		// Redial the server to get it to do callback again
       
   369 		return CDlUpInit::NewL(*iSMObserver,*iNdEnv);
       
   370 		}
       
   371 	else
       
   372 		{
       
   373 		// HangUp will be the next state whether or not a client has requested a connection cancel
       
   374 		return CDlInHangUp::NewL(*iSMObserver, *iNdEnv);
       
   375 		}
       
   376 	}
       
   377 
       
   378 void CDlInOpen::DoCancel()
       
   379 /**
       
   380 Cancels active requests.
       
   381 */
       
   382 	{
       
   383 	}
       
   384 
       
   385 void CDlInOpen::RunL()
       
   386 /**
       
   387 Dial in open start completed.
       
   388 Call ConnectionComplete() with EConnectionOpen and iStatus.Int().
       
   389 */
       
   390 	{
       
   391 	__FLOG_STMT(_LIT8(logString,"NetDial:\tConnection Open");)
       
   392 	__FLOG_STATIC(KNetDialLogFolder(),KNetDialLogFile(),logString());
       
   393 	iSMObserver->ConnectionComplete(ECsdConnectionOpen,iStatus.Int());
       
   394 	}
       
   395 
       
   396 CDlInDisconnect* CDlInDisconnect::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   397 /**
       
   398 Disconnect State Definition
       
   399 
       
   400 2 phased constructor for CDlInDisconnect, first phase.
       
   401 
       
   402 @param aSMObserver a reference to state machine observer.
       
   403 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   404 @exception Leaves if ConstructL() leaves, or not enough memory is available.
       
   405 @return a new CDlInDisconnect object.
       
   406 */
       
   407 	{
       
   408 	CDlInDisconnect* r=new(ELeave) CDlInDisconnect(aSMObserver, aNdEnv);
       
   409 	CleanupStack::PushL(r);
       
   410 	r->ConstructL();
       
   411 	CleanupStack::Pop();
       
   412 	return r;
       
   413 	}
       
   414 
       
   415 CDlInDisconnect::CDlInDisconnect(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   416 	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
       
   417 /**
       
   418 Private constructor for CDlInDisconnect, used in the first phase of construction.
       
   419 
       
   420 @param aSMObserver a reference to the database accessor.
       
   421 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   422 */
       
   423 	{}
       
   424 
       
   425 void CDlInDisconnect::ConstructL()
       
   426 /**
       
   427 Instantiate Member variable.
       
   428 */
       
   429 	{}
       
   430 
       
   431 CDlInDisconnect::~CDlInDisconnect()
       
   432 /**
       
   433 Destructor.
       
   434 Cancel active request.
       
   435 */
       
   436 	{
       
   437 	Cancel();
       
   438 	}
       
   439 
       
   440 void CDlInDisconnect::StartState()
       
   441 /**
       
   442 Starts dial in disconnect state.
       
   443 If ETel server processor is used, close it and possible opened objects.
       
   444 Call JumpToRunl with KErrNone.
       
   445 */
       
   446 	{
       
   447 	if ((iNdEnv->TelServPrc())!=NULL)
       
   448 		(iNdEnv->TelServPrc())->CloseCall();
       
   449 	
       
   450 	// We need to make sure that logging is finished before closing everything.
       
   451 	// forward iStatus to the logger, which will be responsible to complete iStatus when it is finished.
       
   452 	iStatus = KRequestPending;
       
   453 	iNdEnv->Logger()->LogDataNotifyLastEventUpdate(&iStatus);
       
   454 	SetActive();
       
   455 	}
       
   456 
       
   457 CAgentStateBase* CDlInDisconnect::NextStateL(TBool /*aContinue*/)
       
   458 /**
       
   459 Returns the same disconnect state.
       
   460 
       
   461 @exception Leaves if NewL() leaves.
       
   462 @return a new CDlInDisconnect object.
       
   463 */
       
   464 	{
       
   465 	return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
       
   466 	}
       
   467 
       
   468 void CDlInDisconnect::DoCancel()
       
   469 /**
       
   470 Cancels active requests.
       
   471 */
       
   472 	{
       
   473 	}
       
   474 
       
   475 void CDlInDisconnect::RunL()
       
   476 /**
       
   477 Dial in disconnect completed.
       
   478 Call DisconnectComplete().
       
   479 */
       
   480 	{
       
   481 	__FLOG_STMT(_LIT8(logString,"NetDial:\tDisconnect Complete");)
       
   482 	__FLOG_STATIC(KNetDialLogFolder(),KNetDialLogFile(),logString());
       
   483 	
       
   484 	iSMObserver->DisconnectComplete();
       
   485 	}
       
   486 
       
   487 CDlInHangUp* CDlInHangUp::NewL(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   488 /**
       
   489 Hangup State Definition
       
   490 
       
   491 2 phased constructor for CDlInHangUp, first phase.
       
   492 
       
   493 @param aSMObserver a reference to state machine observer.
       
   494 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   495 @exception Leaves if ConstructL() leaves, or not enough memory is available.
       
   496 @return a new CDlInHangUp object.
       
   497 */
       
   498 	{
       
   499 	CDlInHangUp* r=new(ELeave) CDlInHangUp(aSMObserver, aNdEnv);
       
   500 	CleanupStack::PushL(r);
       
   501 	r->ConstructL();
       
   502 	CleanupStack::Pop();
       
   503 	return r;
       
   504 	}
       
   505 
       
   506 CDlInHangUp::CDlInHangUp(MAgentStateMachineEnv& aSMObserver, MNetdialEnv& aNdEnv)
       
   507 	: CAgentStateBase(aSMObserver),iNdEnv(&aNdEnv)
       
   508 /**
       
   509 Private constructor for CDlInHangUp, used in the first phase of construction.
       
   510 
       
   511 @param aSMObserver a reference to the database accessor.
       
   512 @param aNdEnv a reference to the Netdial which defines a set of utility functions.
       
   513 */
       
   514 	{}
       
   515 
       
   516 void CDlInHangUp::ConstructL()
       
   517 /**
       
   518 Instantiate Member variable.
       
   519 */
       
   520 	{}
       
   521 
       
   522 CDlInHangUp::~CDlInHangUp()
       
   523 /**
       
   524 Destructor.
       
   525 Cancel active request.
       
   526 */
       
   527 	{
       
   528 	Cancel();
       
   529 	}
       
   530 
       
   531 void CDlInHangUp::StartState()
       
   532 /**
       
   533 Starts dial in hangup state.
       
   534 Call UpdateProgress with ECsdStartingHangUp and KErrNone.
       
   535 If COMM-port is loaned, return port to ETEL.
       
   536 If returning of COMM-port leaves, trap error and call JumpToRunl with error.
       
   537 If call is active, start hangup and set state active.
       
   538 Else call JumpToRunl() with KErrNone.
       
   539 */
       
   540 	{
       
   541 	iSMObserver->UpdateProgress(ECsdStartingHangUp,KErrNone);
       
   542 
       
   543 	if (iNdEnv->TelServPrc()->CommPortLoaned())
       
   544 		{
       
   545 		// returns ownership of the comm port to ETEL
       
   546 		TRAPD(err,(iNdEnv->TelServPrc())->ReturnCommPortL());
       
   547 		if(err!=KErrNone)
       
   548 			{
       
   549 			JumpToRunl(err);
       
   550 			return;
       
   551 			}
       
   552 		}
       
   553 
       
   554 	if (iNdEnv->TelServPrc()->CallActive())
       
   555 		{
       
   556 		(iNdEnv->TelServPrc())->StartHangUpAfterDialIn(*this);
       
   557 		iStatus=KRequestPending;
       
   558 		SetActive();
       
   559 		}
       
   560 	else
       
   561 		JumpToRunl(KErrNone);
       
   562 	}
       
   563 
       
   564 CAgentStateBase* CDlInHangUp::NextStateL(TBool /*aContinue*/)
       
   565 /**
       
   566 Changes to from init state to next state.
       
   567 Disconnect will be the next state whether or not a client has requested a connection cancel.
       
   568 Create disconnect state.
       
   569 
       
   570 @exception Leaves if NewL() leaves.
       
   571 @return a new CDlInDisconnect object.
       
   572 */
       
   573 	{
       
   574 	return CDlInDisconnect::NewL(*iSMObserver, *iNdEnv);
       
   575 	}
       
   576 
       
   577 void CDlInHangUp::TelFunctionComplete(TInt aError)
       
   578 /**
       
   579 Dial in hangup TelFunctionComplete.
       
   580 Complete state with aError.
       
   581 
       
   582 @param aError identifies the error code for completition.
       
   583 */
       
   584 	{
       
   585 	TRequestStatus* status=&iStatus;
       
   586 	User::RequestComplete(status,aError);
       
   587 	}
       
   588 
       
   589 void CDlInHangUp::DoCancel()
       
   590 /**
       
   591 Cancels active requests.
       
   592 */
       
   593 	{
       
   594 	if((iNdEnv->TelServPrc())!=NULL)
       
   595 		(iNdEnv->TelServPrc())->Cancel();
       
   596 	if(iStatus==KRequestPending)
       
   597 		{
       
   598 		TelFunctionComplete(KErrCancel);
       
   599 		}
       
   600 	}
       
   601 
       
   602 void CDlInHangUp::RunL()
       
   603 /**
       
   604 Dial in hangup completed.
       
   605 If there is an error then signal it, otherwise advance phase 
       
   606 Hangup is always asynchronous, so it should never complete when cancelled.
       
   607 */
       
   608 	{
       
   609 	//update the log object
       
   610 	iNdEnv->Logger()->LogDataUpdateEvent(R_LOG_CON_DISCONNECTED, KLogDataEventTypeUid);
       
   611 	if(iStatus!=KErrNone)
       
   612 		{
       
   613 		__FLOG_STMT(_LIT(logString3,"Hanging Up");)
       
   614 		__FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue<const TDesC>(KCompletedPhaseLogString()), &logString3(), iStatus.Int());
       
   615 		}
       
   616 	iSMObserver->UpdateProgress(ECsdFinishedHangUp,KErrNone);
       
   617 	(iNdEnv->BaseEnv())->CompleteState(iStatus.Int());
       
   618 	}