telephonyserverplugins/simtsy/src/CSimVoiceCall.cpp
branchRCL_3
changeset 20 07a122eea281
parent 19 630d2f34d719
equal deleted inserted replaced
19:630d2f34d719 20:07a122eea281
     1 // Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    19 
    19 
    20 /**
    20 /**
    21  @file
    21  @file
    22 */
    22 */
    23 
    23 
    24 
       
    25 
       
    26 #include "OstTraceDefinitions.h"
       
    27 #ifdef OST_TRACE_COMPILER_IN_USE
       
    28 #include "CSimVoiceCallTraces.h"
       
    29 #endif
       
    30 
       
    31 #include <testconfigfileparser.h>
    24 #include <testconfigfileparser.h>
    32 
    25 
    33 #include "CSimVoiceCall.h"
    26 #include "CSimVoiceCall.h"
    34 #include "CSimPhone.h"
    27 #include "CSimPhone.h"
    35 #include "CSimDtmf.h"
    28 #include "CSimDtmf.h"
       
    29 #include "Simlog.h"
    36 #include "CSimTsyMode.h"
    30 #include "CSimTsyMode.h"
    37 
    31 
    38 CSimVoiceCall* CSimVoiceCall::NewL(CSimLine* aLine,const TDesC& aName, CSimPhone* aPhone)
    32 CSimVoiceCall* CSimVoiceCall::NewL(CSimLine* aLine,const TDesC& aName, CSimPhone* aPhone)
    39 /**
    33 /**
    40 * Standard two phase constructor.
    34 * Standard two phase constructor.
    67 * Retrieves all the pausing duration tags from the config file
    61 * Retrieves all the pausing duration tags from the config file
    68 *
    62 *
    69 * @param aName name of the voice call to be constructed
    63 * @param aName name of the voice call to be constructed
    70 */
    64 */
    71 	{
    65 	{
    72 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_CONSTRUCTL_1, "Starting to parse Voice Call config parameters...");
    66 	LOGVOICE1("Starting to parse Voice Call config parameters...");
    73 	iCaps=Caps();
    67 	iCaps=Caps();
    74 	iDiallingPause=iLine->CfgFile()->ItemValue(KDiallingPauseDuration,KDefaultDiallingPauseDuration);
    68 	iDiallingPause=iLine->CfgFile()->ItemValue(KDiallingPauseDuration,KDefaultDiallingPauseDuration);
    75 	iConnectingPause=iLine->CfgFile()->ItemValue(KConnectingPauseDuration,KDefaultConnectingPauseDuration);
    69 	iConnectingPause=iLine->CfgFile()->ItemValue(KConnectingPauseDuration,KDefaultConnectingPauseDuration);
    76 	iDisconnectingPause=iLine->CfgFile()->ItemValue(KDisconnectingPauseDuration,KDefaultDisconnectingPauseDuration);
    70 	iDisconnectingPause=iLine->CfgFile()->ItemValue(KDisconnectingPauseDuration,KDefaultDisconnectingPauseDuration);
    77 	iAnswerIncomingPause=iLine->CfgFile()->ItemValue(KAnswerIncomingPauseDuration,KDefaultAnswerIncomingPauseDuration);
    71 	iAnswerIncomingPause=iLine->CfgFile()->ItemValue(KAnswerIncomingPauseDuration,KDefaultAnswerIncomingPauseDuration);
    89 	if (item)
    83 	if (item)
    90 		{
    84 		{
    91 		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,delay);
    85 		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,delay);
    92 		if(ret!=KErrNone)
    86 		if(ret!=KErrNone)
    93 			{
    87 			{
    94 			OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_CONSTRUCTL_2, "WARNING - CONFIGURATION FILE PARSING - Reading element DELAY returned %d (element no. %d) from tag %s.",ret,0,KNotifyRemotePartyInfo);
    88 			LOGPARSERR("delay",ret,0,&KNotifyRemotePartyInfo);
    95 			}
    89 			}
    96 		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,callingname);
    90 		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,callingname);
    97 		if(ret!=KErrNone)
    91 		if(ret!=KErrNone)
    98 			{
    92 			{
    99 			OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_CONSTRUCTL_3, "WARNING - CONFIGURATION FILE PARSING - Reading element CALLINGNAME returned %d (element no. %d) from tag %s.",ret,1,KNotifyRemotePartyInfo);
    93 			LOGPARSERR("callingname",ret,1,&KNotifyRemotePartyInfo);
   100 			}
    94 			}
   101 		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,remotenumber);
    95 		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,remotenumber);
   102 		if(ret!=KErrNone)
    96 		if(ret!=KErrNone)
   103 			{
    97 			{
   104 			OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_CONSTRUCTL_4, "WARNING - CONFIGURATION FILE PARSING - Reading element REMOTENUMBER returned %d (element no. %d) from tag %s.",ret,2,KNotifyRemotePartyInfo);
    98 			LOGPARSERR("remotenumber",ret,2,&KNotifyRemotePartyInfo);
   105 			}
    99 			}
   106 		
   100 		
   107 		iNotifyRemotePartyInfoTimer->iDelay = delay;
   101 		iNotifyRemotePartyInfoTimer->iDelay = delay;
   108 		iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iDirection = RMobileCall::EDirectionUnknown;
   102 		iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iDirection = RMobileCall::EDirectionUnknown;
   109 		iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iCallingName.Copy(callingname);
   103 		iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iCallingName.Copy(callingname);
   115 	else
   109 	else
   116 		{
   110 		{
   117 		iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iRemoteIdStatus = RMobileCall::ERemoteIdentityUnknown;
   111 		iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iRemoteIdStatus = RMobileCall::ERemoteIdentityUnknown;
   118 		}
   112 		}
   119 	
   113 	
   120 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_CONSTRUCTL_5, "...Finished parsing Voice Call config parameters...");
   114 	LOGVOICE1("...Finished parsing Voice Call config parameters...");
   121 	}
   115 	}
   122 
   116 
   123 CSimVoiceCall::~CSimVoiceCall()
   117 CSimVoiceCall::~CSimVoiceCall()
   124 /**
   118 /**
   125 * Destroy all the objects constructed.
   119 * Destroy all the objects constructed.
   284 * @param aCallParams  the call parameters
   278 * @param aCallParams  the call parameters
   285 * @param aTelNumber The telephone number to dial
   279 * @param aTelNumber The telephone number to dial
   286 * @return KErrNone
   280 * @return KErrNone
   287 */
   281 */
   288 	{
   282 	{
   289 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIAL_1, ">>CSimVoiceCall::Dial");
   283 	LOGVOICE1(">>CSimVoiceCall::Dial");
   290 	// Note: The telephone number and call parameters should be validated against config file
   284 	// Note: The telephone number and call parameters should be validated against config file
   291 	//       values here.
   285 	//       values here.
   292 	
   286 	
   293 	//see where the dial request has orignated from
   287 	//see where the dial request has orignated from
   294 	if(aCallParams)
   288 	if(aCallParams)
   296 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   290 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   297 		RCall::TCallParams& callparams=(*callparamsPckg)();
   291 		RCall::TCallParams& callparams=(*callparamsPckg)();
   298 		
   292 		
   299 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   293 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   300 			{
   294 			{
   301 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIAL_2, "<<CSimVoiceCall::Dial request from Etel 3rd Party client.");
   295 			LOGVOICE1("<<CSimVoiceCall::Dial request from Etel 3rd Party client.");
   302 			}
   296 			}
   303 		}
   297 		}
   304 
   298 
   305 	iDialRequestHandle=aTsyReqHandle;
   299 	iDialRequestHandle=aTsyReqHandle;
   306 	TInt ret;
   300 	TInt ret;
   307 	ret = ActionEvent(ECallEventDial,KErrNone);
   301 	ret = ActionEvent(ECallEventDial,KErrNone);
   308 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIAL_3, "<<CSimVoiceCall::Dial");
   302 	LOGVOICE1("<<CSimVoiceCall::Dial");
   309 	return ret;
   303 	return ret;
   310 	}
   304 	}
   311 	
   305 	
   312 TInt CSimVoiceCall::DialCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   306 TInt CSimVoiceCall::DialCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   313 /**
   307 /**
   315 *
   309 *
   316 * @param aTsyReqHandle
   310 * @param aTsyReqHandle
   317 * @return KErrNone if successfully cancelled
   311 * @return KErrNone if successfully cancelled
   318 */
   312 */
   319 	{
   313 	{
   320 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALCANCEL_1, ">>CSimVoiceCall::DialCancel");
   314 	LOGVOICE1(">>CSimVoiceCall::DialCancel");
   321 	switch(iState)
   315 	switch(iState)
   322 		{
   316 		{
   323 	case RMobileCall::EStatusIdle:
   317 	case RMobileCall::EStatusIdle:
   324 		SimPanic(EIllegalCancelRequest);		// A DialCancel should never reach the TSY in this state.
   318 		SimPanic(EIllegalCancelRequest);		// A DialCancel should never reach the TSY in this state.
   325 		break;
   319 		break;
   346 		break;
   340 		break;
   347 
   341 
   348 	default:
   342 	default:
   349 		break;
   343 		break;
   350 		}
   344 		}
   351 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALCANCEL_2, "<<CSimVoiceCall::DialCancel");
   345 	LOGVOICE1("<<CSimVoiceCall::DialCancel");
   352 	return KErrNone;
   346 	return KErrNone;
   353 	}
   347 	}
   354 
   348 
   355 TInt CSimVoiceCall::DialISV(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams,TDesC* /*aTelNumber*/)
   349 TInt CSimVoiceCall::DialISV(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams,TDesC* /*aTelNumber*/)
   356 /**
   350 /**
   360 * @param aCallParams  the call parameters
   354 * @param aCallParams  the call parameters
   361 * @param aTelNumber The telephone number to dial
   355 * @param aTelNumber The telephone number to dial
   362 * @return KErrNone
   356 * @return KErrNone
   363 */
   357 */
   364 	{
   358 	{
   365 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISV_1, ">>CSimVoiceCall::DialISV");
   359 	LOGVOICE1(">>CSimVoiceCall::DialISV");
   366 	// Note: The telephone number and call parameters should be validated against config file
   360 	// Note: The telephone number and call parameters should be validated against config file
   367 	//       values here.
   361 	//       values here.
   368 	
   362 	
   369 	//see where the dial request has orignated from
   363 	//see where the dial request has orignated from
   370 	if(aCallParams)
   364 	if(aCallParams)
   372 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   366 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   373 		RCall::TCallParams& callparams=(*callparamsPckg)();
   367 		RCall::TCallParams& callparams=(*callparamsPckg)();
   374 		
   368 		
   375 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   369 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   376 			{
   370 			{
   377 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISV_2, "<<CSimVoiceCall::Dial request from Etel 3rd Party client.");
   371 			LOGVOICE1("<<CSimVoiceCall::Dial request from Etel 3rd Party client.");
   378 			}
   372 			}
   379 		}
   373 		}
   380 
   374 
   381 	iDialRequestHandle=aTsyReqHandle;
   375 	iDialRequestHandle=aTsyReqHandle;
   382 	TInt ret;
   376 	TInt ret;
   383 	ret = ActionEvent(ECallEventDial,KErrNone);
   377 	ret = ActionEvent(ECallEventDial,KErrNone);
   384 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISV_3, "<<CSimVoiceCall::DialISV");
   378 	LOGVOICE1("<<CSimVoiceCall::DialISV");
   385 	return ret;
   379 	return ret;
   386 	}
   380 	}
   387 
   381 
   388 TInt CSimVoiceCall::DialISVCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   382 TInt CSimVoiceCall::DialISVCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   389 /**
   383 /**
   391 *
   385 *
   392 * @param aTsyReqHandle
   386 * @param aTsyReqHandle
   393 * @return KErrNone if successfully cancelled
   387 * @return KErrNone if successfully cancelled
   394 */
   388 */
   395 	{
   389 	{
   396 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISVCANCEL_1, ">>CSimVoiceCall::DialISVCancel");
   390 	LOGVOICE1(">>CSimVoiceCall::DialISVCancel");
   397 	switch(iState)
   391 	switch(iState)
   398 		{
   392 		{
   399 	case RMobileCall::EStatusIdle:
   393 	case RMobileCall::EStatusIdle:
   400 		SimPanic(EIllegalCancelRequest);		// A DialCancel should never reach the TSY in this state.
   394 		SimPanic(EIllegalCancelRequest);		// A DialCancel should never reach the TSY in this state.
   401 		break;
   395 		break;
   422 		break;
   416 		break;
   423 
   417 
   424 	default:
   418 	default:
   425 		break;
   419 		break;
   426 		}
   420 		}
   427 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISVCANCEL_2, "<<CSimVoiceCall::DialISVCancel");
   421 	LOGVOICE1("<<CSimVoiceCall::DialISVCancel");
   428 	return KErrNone;
   422 	return KErrNone;
   429 	}
   423 	}
   430 
   424 
   431 TInt CSimVoiceCall::AnswerIncomingCall(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams)
   425 TInt CSimVoiceCall::AnswerIncomingCall(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams)
   432 /**
   426 /**
   437 * @param aTsyReqHandle
   431 * @param aTsyReqHandle
   438 * @param aCallParams  the call parameters
   432 * @param aCallParams  the call parameters
   439 * @return KErrNone
   433 * @return KErrNone
   440 */
   434 */
   441 	{
   435 	{
   442 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALL_1, ">>CSimVoiceCall::AnswerIncomingCall  0x%08x, state %d entry ",(TUint)this,iState);
   436 	LOGVOICE3(">>CSimVoiceCall::AnswerIncomingCall  0x%08x, state %d entry ",this,iState);
   443 	
   437 	
   444 	//see where the answer request has orignated from
   438 	//see where the answer request has orignated from
   445 	if(aCallParams)
   439 	if(aCallParams)
   446 		{
   440 		{
   447 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   441 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   448 		RCall::TCallParams& callparams=(*callparamsPckg)();
   442 		RCall::TCallParams& callparams=(*callparamsPckg)();
   449 		
   443 		
   450 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   444 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   451 			{
   445 			{
   452 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALL_2, "<<CSimVoiceCall::AnswerIncomingCall request from Etel 3rd Party client.");
   446 			LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCall request from Etel 3rd Party client.");
   453 			}
   447 			}
   454 		}
   448 		}
   455 	
   449 	
   456 	TInt ret=iLine->SetAutoAnswerCallObject(this);
   450 	TInt ret=iLine->SetAutoAnswerCallObject(this);
   457 	if(ret!=KErrNone)
   451 	if(ret!=KErrNone)
   474 			}
   468 			}
   475 
   469 
   476 		if(ret==KErrNone)
   470 		if(ret==KErrNone)
   477 			ret = ActionEvent(ECallEventAnswerIncoming,KErrNone);		
   471 			ret = ActionEvent(ECallEventAnswerIncoming,KErrNone);		
   478 		}
   472 		}
   479 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALL_3, "<<CSimVoiceCall::AnswerIncomingCall  0x%08x, state %d exit",(TUint)this,iState);
   473 	LOGVOICE3("<<CSimVoiceCall::AnswerIncomingCall  0x%08x, state %d exit",this,iState);
   480 	return ret;
   474 	return ret;
   481 	}
   475 	}
   482 
   476 
   483 TInt CSimVoiceCall::AnswerIncomingCallCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   477 TInt CSimVoiceCall::AnswerIncomingCallCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   484 /**
   478 /**
   486 *
   480 *
   487 * @param aTsyReqHandle
   481 * @param aTsyReqHandle
   488 * @return KErrNone if successfully cancelled
   482 * @return KErrNone if successfully cancelled
   489 */
   483 */
   490 	{
   484 	{
   491 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLCANCEL_1, ">>CSimVoiceCall::AnswerIncomingCallCancel");
   485 	LOGVOICE1(">>CSimVoiceCall::AnswerIncomingCallCancel");
   492 	if(iAnswerIncomingCall.iNotifyPending)
   486 	if(iAnswerIncomingCall.iNotifyPending)
   493 		{
   487 		{
   494 		iAnswerIncomingCall.iNotifyPending=EFalse;
   488 		iAnswerIncomingCall.iNotifyPending=EFalse;
   495 		iLine->ResetAutoAnswerCallObject(this);
   489 		iLine->ResetAutoAnswerCallObject(this);
   496 		ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel);
   490 		ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel);
   497 		}
   491 		}
   498 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLCANCEL_2, "<<CSimVoiceCall::AnswerIncomingCallCancel");
   492 	LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCallCancel");
   499 	return KErrNone;
   493 	return KErrNone;
   500 	}
   494 	}
   501 
   495 
   502 TInt CSimVoiceCall::AnswerIncomingCallISVL(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams)
   496 TInt CSimVoiceCall::AnswerIncomingCallISVL(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams)
   503 /**
   497 /**
   508 * @param aTsyReqHandle
   502 * @param aTsyReqHandle
   509 * @param aCallParams  the call parameters
   503 * @param aCallParams  the call parameters
   510 * @return KErrNone
   504 * @return KErrNone
   511 */
   505 */
   512 	{
   506 	{
   513 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVL_1, ">>CSimVoiceCall::AnswerIncomingCallISV  0x%08x, state %d entry ",(TUint)this,iState);
   507 	LOGVOICE3(">>CSimVoiceCall::AnswerIncomingCallISV  0x%08x, state %d entry ",this,iState);
   514 	
   508 	
   515 	//see where the answer request has orignated from
   509 	//see where the answer request has orignated from
   516 	if(aCallParams)
   510 	if(aCallParams)
   517 		{
   511 		{
   518 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   512 		RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams));
   519 		RCall::TCallParams& callparams=(*callparamsPckg)();
   513 		RCall::TCallParams& callparams=(*callparamsPckg)();
   520 		
   514 		
   521 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   515 		if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1)
   522 			{
   516 			{
   523 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVL_2, "<<CSimVoiceCall::AnswerIncomingCallISV request from Etel 3rd Party client.");
   517 			LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCallISV request from Etel 3rd Party client.");
   524 			}
   518 			}
   525 		}
   519 		}
   526 	
   520 	
   527 	TInt ret=iLine->SetAutoAnswerCallObject(this);
   521 	TInt ret=iLine->SetAutoAnswerCallObject(this);
   528 	if(ret!=KErrNone)
   522 	if(ret!=KErrNone)
   547 			if (ret == KErrNone)
   541 			if (ret == KErrNone)
   548                 {
   542                 {
   549 				ret = ActionEvent(ECallEventAnswerIncoming,KErrNone);		
   543 				ret = ActionEvent(ECallEventAnswerIncoming,KErrNone);		
   550 	 		    }		
   544 	 		    }		
   551 		}
   545 		}
   552 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVL_3, "<<CSimVoiceCall::AnswerIncomingCallISV  0x%08x, state %d exit",(TUint)this,iState);
   546 	LOGVOICE3("<<CSimVoiceCall::AnswerIncomingCallISV  0x%08x, state %d exit",this,iState);
   553 	return ret;
   547 	return ret;
   554 	}
   548 	}
   555 
   549 
   556 TInt CSimVoiceCall::AnswerIncomingCallISVCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   550 TInt CSimVoiceCall::AnswerIncomingCallISVCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   557 /**
   551 /**
   559 *
   553 *
   560 * @param aTsyReqHandle
   554 * @param aTsyReqHandle
   561 * @return KErrNone if successfully cancelled
   555 * @return KErrNone if successfully cancelled
   562 */
   556 */
   563 	{
   557 	{
   564 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVCANCEL_1, ">>CSimVoiceCall::AnswerIncomingCallISVCancel");
   558 	LOGVOICE1(">>CSimVoiceCall::AnswerIncomingCallISVCancel");
   565 	if(iAnswerIncomingCall.iNotifyPending)
   559 	if(iAnswerIncomingCall.iNotifyPending)
   566 		{
   560 		{
   567 		iAnswerIncomingCall.iNotifyPending=EFalse;
   561 		iAnswerIncomingCall.iNotifyPending=EFalse;
   568 		iLine->ResetAutoAnswerCallObject(this);
   562 		iLine->ResetAutoAnswerCallObject(this);
   569 		ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel);
   563 		ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel);
   570 		}
   564 		}
   571 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVCANCEL_2, "<<CSimVoiceCall::AnswerIncomingCallISVCancel");
   565 	LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCallISVCancel");
   572 	return KErrNone;
   566 	return KErrNone;
   573 	}
   567 	}
   574 
   568 
   575 TInt CSimVoiceCall::Connect(const TTsyReqHandle aTsyReqHandle,const TDesC8* /*aCallParams*/)
   569 TInt CSimVoiceCall::Connect(const TTsyReqHandle aTsyReqHandle,const TDesC8* /*aCallParams*/)
   576 	{
   570 	{
   590 *
   584 *
   591 * @param aTsyReqHandle
   585 * @param aTsyReqHandle
   592 * @return KErrNone
   586 * @return KErrNone
   593 */
   587 */
   594 	{
   588 	{
   595 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_HANGUP_1, ">>CSimVoiceCall::HangUp");
   589 	LOGVOICE1(">>CSimVoiceCall::HangUp");
   596 	iHangUpRequestHandle=aTsyReqHandle;
   590 	iHangUpRequestHandle=aTsyReqHandle;
   597 	TInt ret=ActionEvent(ECallEventHangUp,KErrNone);
   591 	TInt ret=ActionEvent(ECallEventHangUp,KErrNone);
   598 	if(ret!=KErrNone)
   592 	if(ret!=KErrNone)
   599 		ReqCompleted(aTsyReqHandle,ret);
   593 		ReqCompleted(aTsyReqHandle,ret);
   600 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_HANGUP_2, "<<CSimVoiceCall::HangUp");
   594 	LOGVOICE1("<<CSimVoiceCall::HangUp");
   601 	return KErrNone;
   595 	return KErrNone;
   602 	}
   596 	}
   603 
   597 
   604 TInt CSimVoiceCall::HangUpCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   598 TInt CSimVoiceCall::HangUpCancel(const TTsyReqHandle /*aTsyReqHandle*/)
   605 /**
   599 /**
   607 *
   601 *
   608 * @param aTsyReqHandle
   602 * @param aTsyReqHandle
   609 * @return KErrNone if successfully cancelled
   603 * @return KErrNone if successfully cancelled
   610 */
   604 */
   611 	{
   605 	{
   612 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_HANGUPCANCEL_1, ">>CSimVoiceCall::HangUpCancel");
   606 	LOGVOICE1(">>CSimVoiceCall::HangUpCancel");
   613 	switch(iState)
   607 	switch(iState)
   614 		{
   608 		{
   615 	case RMobileCall::EStatusIdle:
   609 	case RMobileCall::EStatusIdle:
   616 		SimPanic(EIllegalCancelRequest);		// A DialCancel should never reach the TSY in this state.
   610 		SimPanic(EIllegalCancelRequest);		// A DialCancel should never reach the TSY in this state.
   617 		break;
   611 		break;
   633 		break;
   627 		break;
   634 
   628 
   635 	default:
   629 	default:
   636 		break;
   630 		break;
   637 		}
   631 		}
   638 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_HANGUPCANCEL_2, "<<CSimVoiceCall::HangUpCancel");
   632 	LOGVOICE1("<<CSimVoiceCall::HangUpCancel");
   639 	return KErrNone;
   633 	return KErrNone;
   640 	}
   634 	}
   641 
   635 
   642 TInt CSimVoiceCall::RelinquishOwnership()
   636 TInt CSimVoiceCall::RelinquishOwnership()
   643 	{
   637 	{
   859 */
   853 */
   860 	{
   854 	{
   861 	TInt ret=KErrNone;
   855 	TInt ret=KErrNone;
   862 	__ASSERT_ALWAYS(iState!=RMobileCall::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal));
   856 	__ASSERT_ALWAYS(iState!=RMobileCall::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal));
   863 	__ASSERT_ALWAYS(aEvent!=ECallEventNtRasConnected,SimPanic(ECallEventIllegal));
   857 	__ASSERT_ALWAYS(aEvent!=ECallEventNtRasConnected,SimPanic(ECallEventIllegal));
   864 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_1, ">>CSimVoiceCall::ActionEvent 0x%08x %d",(TUint)this,iState);
   858 	LOGVOICE3(">>CSimVoiceCall::ActionEvent 0x%08x %d",this,iState);
   865 
   859 
   866 	switch(aEvent)
   860 	switch(aEvent)
   867 		{
   861 		{
   868 	case ECallEventDial:
   862 	case ECallEventDial:
   869 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_2, ">>CSimVoiceCall::ActionEvent = [ECallEventDial]");
   863 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventDial]");
   870 		if(iState==RMobileCall::EStatusIdle)
   864 		if(iState==RMobileCall::EStatusIdle)
   871 			{			
   865 			{			
   872 			TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusDialling,EFalse,EFalse));
   866 			TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusDialling,EFalse,EFalse));
   873 			if(ret==KErrNone)
   867 			if(ret==KErrNone)
   874 				iTimer->Start(iDiallingPause,this);
   868 				iTimer->Start(iDiallingPause,this);
   877 			return KErrEtelCallAlreadyActive;
   871 			return KErrEtelCallAlreadyActive;
   878 		break;
   872 		break;
   879 
   873 
   880 	case ECallEventHangUp:
   874 	case ECallEventHangUp:
   881 		{
   875 		{
   882 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_3, ">>CSimVoiceCall::ActionEvent = [ECallEventHangUp]");
   876 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventHangUp]");
   883 		switch(iState)
   877 		switch(iState)
   884 			{
   878 			{
   885 		case RMobileCall::EStatusDialling:
   879 		case RMobileCall::EStatusDialling:
   886 		case RMobileCall::EStatusRinging:
   880 		case RMobileCall::EStatusRinging:
   887 		case RMobileCall::EStatusAnswering:
   881 		case RMobileCall::EStatusAnswering:
   902 			}
   896 			}
   903 		}
   897 		}
   904 		break;
   898 		break;
   905 
   899 
   906 	case ECallEventIncomingCall:
   900 	case ECallEventIncomingCall:
   907 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_4, ">>CSimVoiceCall::ActionEvent = [ECallEventIncomingCall]");
   901 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventIncomingCall]");
   908 		if(iState==RMobileCall::EStatusIdle)
   902 		if(iState==RMobileCall::EStatusIdle)
   909 			{
   903 			{
   910 			if(iAnswerIncomingCall.iNotifyPending)
   904 			if(iAnswerIncomingCall.iNotifyPending)
   911 				{
   905 				{
   912 				TRAP(ret,	 ret=ProcessAnswerIncomingCallL());
   906 				TRAP(ret,	 ret=ProcessAnswerIncomingCallL());
   921 		else
   915 		else
   922 			return KErrEtelCallAlreadyActive;
   916 			return KErrEtelCallAlreadyActive;
   923 		break;
   917 		break;
   924 
   918 
   925 	case ECallEventAnswerIncoming:
   919 	case ECallEventAnswerIncoming:
   926 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_5, ">>CSimVoiceCall::ActionEvent = [ECallEventAnswerIncoming]");
   920 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventAnswerIncoming]");
   927 		if(iState==RMobileCall::EStatusRinging)
   921 		if(iState==RMobileCall::EStatusRinging)
   928 			{
   922 			{
   929 			TRAP(ret, ret=ProcessAnswerIncomingCallL());
   923 			TRAP(ret, ret=ProcessAnswerIncomingCallL());
   930 			if(ret!=KErrNone)
   924 			if(ret!=KErrNone)
   931 				{
   925 				{
   935 		else
   929 		else
   936 			SimPanic(EIllegalStateInconsistancy);		// This is checked before calling ActionEvent
   930 			SimPanic(EIllegalStateInconsistancy);		// This is checked before calling ActionEvent
   937 		break;
   931 		break;
   938 
   932 
   939 	case ECallEventRemoteHangup:
   933 	case ECallEventRemoteHangup:
   940 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_6, ">>CSimVoiceCall::ActionEvent = [ECallEventRemoteHangup]");
   934 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventRemoteHangup]");
   941 		if(iState==RMobileCall::EStatusConnected)
   935 		if(iState==RMobileCall::EStatusConnected)
   942 			{
   936 			{
   943 			TRAP(ret, ret=ProcessRemoteHangupL());
   937 			TRAP(ret, ret=ProcessRemoteHangupL());
   944 			if(ret!=KErrNone)
   938 			if(ret!=KErrNone)
   945 				{
   939 				{
   950 			SimPanic(EIllegalStateInconsistancy);		// This is checked before calling ActionEvent
   944 			SimPanic(EIllegalStateInconsistancy);		// This is checked before calling ActionEvent
   951 		break;
   945 		break;
   952 
   946 
   953 	case ECallEventTimeOut:
   947 	case ECallEventTimeOut:
   954 			{
   948 			{
   955 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_7, ">>CSimVoiceCall::ActionEvent = [ECallEventTimeOut]");
   949 			LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventTimeOut]");
   956 			switch(iState)
   950 			switch(iState)
   957 				{
   951 				{
   958 			case RMobileCall::EStatusDialling:
   952 			case RMobileCall::EStatusDialling:
   959 				OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_8, ">>CSimVoiceCall::State = [EStatusDialling]");
   953 				LOGVOICE1(">>CSimVoiceCall::State = [EStatusDialling]");
   960 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnecting,EFalse,EFalse));
   954 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnecting,EFalse,EFalse));
   961 				if(ret==KErrNone)
   955 				if(ret==KErrNone)
   962 					iTimer->Start(iConnectingPause,this);
   956 					iTimer->Start(iConnectingPause,this);
   963 				return ret;
   957 				return ret;
   964 			
   958 			
   965 			case RMobileCall::EStatusConnecting:
   959 			case RMobileCall::EStatusConnecting:
   966 				OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_9, ">>CSimVoiceCall::State = [EStatusConnecting]");
   960 				LOGVOICE1(">>CSimVoiceCall::State = [EStatusConnecting]");
   967 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse));
   961 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse));
   968 				UpdateRemotePartyInfoDirection(RMobileCall::EStatusConnecting);
   962 				UpdateRemotePartyInfoDirection(RMobileCall::EStatusConnecting);
   969 				ReqCompleted(iDialRequestHandle,ret);
   963 				ReqCompleted(iDialRequestHandle,ret);
   970 				return ret;
   964 				return ret;
   971 				
   965 				
   972 			case RMobileCall::EStatusDisconnecting:
   966 			case RMobileCall::EStatusDisconnecting:
   973 				OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_10, ">>CSimVoiceCall::State = [EStatusDisconnecting]");
   967 				LOGVOICE1(">>CSimVoiceCall::State = [EStatusDisconnecting]");
   974 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusIdle,EFalse,EFalse));
   968 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusIdle,EFalse,EFalse));
   975 				ReqCompleted(iHangUpRequestHandle,ret);
   969 				ReqCompleted(iHangUpRequestHandle,ret);
   976 				return ret;
   970 				return ret;
   977 				
   971 				
   978 			case RMobileCall::EStatusAnswering:
   972 			case RMobileCall::EStatusAnswering:
   979 				OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_11, ">>CSimVoiceCall::State = [EStatusAnswering]");
   973 				LOGVOICE1(">>CSimVoiceCall::State = [EStatusAnswering]");
   980 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse));
   974 				TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse));
   981 				UpdateRemotePartyInfoDirection(RMobileCall::EStatusAnswering);
   975 				UpdateRemotePartyInfoDirection(RMobileCall::EStatusAnswering);
   982 				ReqCompleted(iAnswerIncomingCall.iNotifyHandle,ret);
   976 				ReqCompleted(iAnswerIncomingCall.iNotifyHandle,ret);
   983 				return ret;
   977 				return ret;
   984 
   978 
   986 				break;
   980 				break;
   987 				}
   981 				}
   988 			}
   982 			}
   989 		break;
   983 		break;
   990 	case ECallEventHold:
   984 	case ECallEventHold:
   991 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_12, ">>CSimVoiceCall::ActionEvent = [ECallEventHold]");
   985 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventHold]");
   992 		__ASSERT_ALWAYS(iState==RMobileCall::EStatusConnected,SimPanic(EIllegalStateInconsistancy));
   986 		__ASSERT_ALWAYS(iState==RMobileCall::EStatusConnected,SimPanic(EIllegalStateInconsistancy));
   993 		TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusHold,aOtherArgument == ECallEventSwap,EFalse));
   987 		TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusHold,aOtherArgument == ECallEventSwap,EFalse));
   994 		if (ret == KErrNone)
   988 		if (ret == KErrNone)
   995 			ReqCompleted(iHoldResumeRequestHandle,ret);
   989 			ReqCompleted(iHoldResumeRequestHandle,ret);
   996 		break;
   990 		break;
   997 
   991 
   998 	case ECallEventResume:
   992 	case ECallEventResume:
   999 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_13, ">>CSimVoiceCall::ActionEvent = [ECallEventResume]");
   993 		LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventResume]");
  1000 		__ASSERT_ALWAYS(iState==RMobileCall::EStatusHold,SimPanic(EIllegalStateInconsistancy));
   994 		__ASSERT_ALWAYS(iState==RMobileCall::EStatusHold,SimPanic(EIllegalStateInconsistancy));
  1001 		TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,aOtherArgument == ECallEventSwap,EFalse));
   995 		TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,aOtherArgument == ECallEventSwap,EFalse));
  1002 		if (ret == KErrNone)
   996 		if (ret == KErrNone)
  1003 			ReqCompleted(iHoldResumeRequestHandle,ret);
   997 			ReqCompleted(iHoldResumeRequestHandle,ret);
  1004 		break;
   998 		break;
  1019 /**
  1013 /**
  1020 * Timer callback function.  When the timer goes off, it will call back into this
  1014 * Timer callback function.  When the timer goes off, it will call back into this
  1021 * function for further processing.
  1015 * function for further processing.
  1022 */
  1016 */
  1023 	{
  1017 	{
  1024 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_TIMERCALLBACK_1, ">>CSimVoiceCall::TimerCallBack");
  1018 	LOGVOICE1(">>CSimVoiceCall::TimerCallBack");
  1025 	TInt ret=ActionEvent(ECallEventTimeOut,KErrNone);
  1019 	TInt ret=ActionEvent(ECallEventTimeOut,KErrNone);
  1026 	__ASSERT_ALWAYS(ret==KErrNone,SimPanic(ETimeOutEventActionFailed));
  1020 	__ASSERT_ALWAYS(ret==KErrNone,SimPanic(ETimeOutEventActionFailed));
  1027 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_TIMERCALLBACK_2, "<<CSimVoiceCall::TimerCallBack");
  1021 	LOGVOICE1("<<CSimVoiceCall::TimerCallBack");
  1028 	}
  1022 	}
  1029 
  1023 
  1030 TInt CSimVoiceCall::ProcessAnswerIncomingCallL()
  1024 TInt CSimVoiceCall::ProcessAnswerIncomingCallL()
  1031 /**
  1025 /**
  1032 * Answers an Incoming Call.
  1026 * Answers an Incoming Call.
  1033 * First the call state must be changed to "answering", then the flag indicating
  1027 * First the call state must be changed to "answering", then the flag indicating
  1034 * that an answer incoming call request is no longer pending.  Finally, a new
  1028 * that an answer incoming call request is no longer pending.  Finally, a new
  1035 * call object must be assigned to receive the details of the next incoming call.
  1029 * call object must be assigned to receive the details of the next incoming call.
  1036 */
  1030 */
  1037 	{
  1031 	{
  1038 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSANSWERINCOMINGCALLL_1, ">>CSimVoiceCall::ProcessAnswerIncomingCall %d , 0x%08x",iState,(TUint)this);
  1032 	LOGVOICE3(">>CSimVoiceCall::ProcessAnswerIncomingCall %d",iState,this);
  1039 	TInt ret=ChangeStateL(RMobileCall::EStatusAnswering,EFalse,EFalse);
  1033 	TInt ret=ChangeStateL(RMobileCall::EStatusAnswering,EFalse,EFalse);
  1040 	if(ret!=KErrNone)
  1034 	if(ret!=KErrNone)
  1041 		return ret;
  1035 		return ret;
  1042 	iTimer->Start(iAnswerIncomingPause,this);
  1036 	iTimer->Start(iAnswerIncomingPause,this);
  1043 	iAnswerIncomingCall.iNotifyPending=EFalse;
  1037 	iAnswerIncomingCall.iNotifyPending=EFalse;
  1044 	iLine->ResetAutoAnswerCallObject(this);
  1038 	iLine->ResetAutoAnswerCallObject(this);
  1045 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSANSWERINCOMINGCALLL_2, "<<CSimVoiceCall::ProcessAnswerIncomingCall");
  1039 	LOGVOICE1("<<CSimVoiceCall::ProcessAnswerIncomingCall");
  1046 	return ret;
  1040 	return ret;
  1047 	}
  1041 	}
  1048 
  1042 
  1049 TInt CSimVoiceCall::ProcessRemoteHangupL()
  1043 TInt CSimVoiceCall::ProcessRemoteHangupL()
  1050 /**
  1044 /**
  1052 * First the call state must be changed to "disconnecting", then the flag indicating
  1046 * First the call state must be changed to "disconnecting", then the flag indicating
  1053 * that a remote hangup request is no longer pending.  Finally, a new
  1047 * that a remote hangup request is no longer pending.  Finally, a new
  1054 * call object must be assigned to receive the next remote hangup request.
  1048 * call object must be assigned to receive the next remote hangup request.
  1055 */
  1049 */
  1056 	{
  1050 	{
  1057 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSREMOTEHANGUPL_1, ">>CSimVoiceCall::ProcessRemoteHangupL %d, 0x%08x",iState,(TUint)this);
  1051 	LOGVOICE3(">>CSimVoiceCall::ProcessRemoteHangupL %d",iState,this);
  1058 	TInt ret=ChangeStateL(RMobileCall::EStatusDisconnecting,EFalse,EFalse);
  1052 	TInt ret=ChangeStateL(RMobileCall::EStatusDisconnecting,EFalse,EFalse);
  1059 	if(ret!=KErrNone)
  1053 	if(ret!=KErrNone)
  1060 		return ret;
  1054 		return ret;
  1061 	iTimer->Start(iRemoteHangupPause,this);
  1055 	iTimer->Start(iRemoteHangupPause,this);
  1062 	iLine->ResetRemoteHangupCallObject(this);
  1056 	iLine->ResetRemoteHangupCallObject(this);
  1063 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSREMOTEHANGUPL_2, "<<CSimVoiceCall::ProcessRemoteHangupL");
  1057 	LOGVOICE1("<<CSimVoiceCall::ProcessRemoteHangupL");
  1064 	return ret;
  1058 	return ret;
  1065 	}
  1059 	}
  1066 
  1060 
  1067 void CSimVoiceCall::SetDtmfSession(CSimDtmf* aSimDtmf)
  1061 void CSimVoiceCall::SetDtmfSession(CSimDtmf* aSimDtmf)
  1068 /**
  1062 /**