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); |
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 /** |
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 /** |
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) |
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) |
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 /** |
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); |
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 /** |