1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2001-2010 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 |
24 #include <testconfigfileparser.h> |
31 #include <testconfigfileparser.h> |
25 |
32 |
26 #include "CSimVoiceCall.h" |
33 #include "CSimVoiceCall.h" |
27 #include "CSimPhone.h" |
34 #include "CSimPhone.h" |
28 #include "CSimDtmf.h" |
35 #include "CSimDtmf.h" |
29 #include "Simlog.h" |
|
30 #include "CSimTsyMode.h" |
36 #include "CSimTsyMode.h" |
31 |
37 |
32 CSimVoiceCall* CSimVoiceCall::NewL(CSimLine* aLine,const TDesC& aName, CSimPhone* aPhone) |
38 CSimVoiceCall* CSimVoiceCall::NewL(CSimLine* aLine,const TDesC& aName, CSimPhone* aPhone) |
33 /** |
39 /** |
34 * Standard two phase constructor. |
40 * Standard two phase constructor. |
61 * Retrieves all the pausing duration tags from the config file |
67 * Retrieves all the pausing duration tags from the config file |
62 * |
68 * |
63 * @param aName name of the voice call to be constructed |
69 * @param aName name of the voice call to be constructed |
64 */ |
70 */ |
65 { |
71 { |
66 LOGVOICE1("Starting to parse Voice Call config parameters..."); |
72 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_CONSTRUCTL_1, "Starting to parse Voice Call config parameters..."); |
67 iCaps=Caps(); |
73 iCaps=Caps(); |
68 iDiallingPause=iLine->CfgFile()->ItemValue(KDiallingPauseDuration,KDefaultDiallingPauseDuration); |
74 iDiallingPause=iLine->CfgFile()->ItemValue(KDiallingPauseDuration,KDefaultDiallingPauseDuration); |
69 iConnectingPause=iLine->CfgFile()->ItemValue(KConnectingPauseDuration,KDefaultConnectingPauseDuration); |
75 iConnectingPause=iLine->CfgFile()->ItemValue(KConnectingPauseDuration,KDefaultConnectingPauseDuration); |
70 iDisconnectingPause=iLine->CfgFile()->ItemValue(KDisconnectingPauseDuration,KDefaultDisconnectingPauseDuration); |
76 iDisconnectingPause=iLine->CfgFile()->ItemValue(KDisconnectingPauseDuration,KDefaultDisconnectingPauseDuration); |
71 iAnswerIncomingPause=iLine->CfgFile()->ItemValue(KAnswerIncomingPauseDuration,KDefaultAnswerIncomingPauseDuration); |
77 iAnswerIncomingPause=iLine->CfgFile()->ItemValue(KAnswerIncomingPauseDuration,KDefaultAnswerIncomingPauseDuration); |
83 if (item) |
89 if (item) |
84 { |
90 { |
85 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,delay); |
91 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,delay); |
86 if(ret!=KErrNone) |
92 if(ret!=KErrNone) |
87 { |
93 { |
88 LOGPARSERR("delay",ret,0,&KNotifyRemotePartyInfo); |
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); |
89 } |
95 } |
90 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,callingname); |
96 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,callingname); |
91 if(ret!=KErrNone) |
97 if(ret!=KErrNone) |
92 { |
98 { |
93 LOGPARSERR("callingname",ret,1,&KNotifyRemotePartyInfo); |
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); |
94 } |
100 } |
95 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,remotenumber); |
101 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,remotenumber); |
96 if(ret!=KErrNone) |
102 if(ret!=KErrNone) |
97 { |
103 { |
98 LOGPARSERR("remotenumber",ret,2,&KNotifyRemotePartyInfo); |
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); |
99 } |
105 } |
100 |
106 |
101 iNotifyRemotePartyInfoTimer->iDelay = delay; |
107 iNotifyRemotePartyInfoTimer->iDelay = delay; |
102 iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iDirection = RMobileCall::EDirectionUnknown; |
108 iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iDirection = RMobileCall::EDirectionUnknown; |
103 iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iCallingName.Copy(callingname); |
109 iNotifyRemotePartyInfoTimer->iRemotePartyInfoV1.iCallingName.Copy(callingname); |
290 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
296 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
291 RCall::TCallParams& callparams=(*callparamsPckg)(); |
297 RCall::TCallParams& callparams=(*callparamsPckg)(); |
292 |
298 |
293 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
299 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
294 { |
300 { |
295 LOGVOICE1("<<CSimVoiceCall::Dial request from Etel 3rd Party client."); |
301 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIAL_2, "<<CSimVoiceCall::Dial request from Etel 3rd Party client."); |
296 } |
302 } |
297 } |
303 } |
298 |
304 |
299 iDialRequestHandle=aTsyReqHandle; |
305 iDialRequestHandle=aTsyReqHandle; |
300 TInt ret; |
306 TInt ret; |
301 ret = ActionEvent(ECallEventDial,KErrNone); |
307 ret = ActionEvent(ECallEventDial,KErrNone); |
302 LOGVOICE1("<<CSimVoiceCall::Dial"); |
308 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIAL_3, "<<CSimVoiceCall::Dial"); |
303 return ret; |
309 return ret; |
304 } |
310 } |
305 |
311 |
306 TInt CSimVoiceCall::DialCancel(const TTsyReqHandle /*aTsyReqHandle*/) |
312 TInt CSimVoiceCall::DialCancel(const TTsyReqHandle /*aTsyReqHandle*/) |
307 /** |
313 /** |
366 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
372 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
367 RCall::TCallParams& callparams=(*callparamsPckg)(); |
373 RCall::TCallParams& callparams=(*callparamsPckg)(); |
368 |
374 |
369 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
375 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
370 { |
376 { |
371 LOGVOICE1("<<CSimVoiceCall::Dial request from Etel 3rd Party client."); |
377 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISV_2, "<<CSimVoiceCall::Dial request from Etel 3rd Party client."); |
372 } |
378 } |
373 } |
379 } |
374 |
380 |
375 iDialRequestHandle=aTsyReqHandle; |
381 iDialRequestHandle=aTsyReqHandle; |
376 TInt ret; |
382 TInt ret; |
377 ret = ActionEvent(ECallEventDial,KErrNone); |
383 ret = ActionEvent(ECallEventDial,KErrNone); |
378 LOGVOICE1("<<CSimVoiceCall::DialISV"); |
384 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_DIALISV_3, "<<CSimVoiceCall::DialISV"); |
379 return ret; |
385 return ret; |
380 } |
386 } |
381 |
387 |
382 TInt CSimVoiceCall::DialISVCancel(const TTsyReqHandle /*aTsyReqHandle*/) |
388 TInt CSimVoiceCall::DialISVCancel(const TTsyReqHandle /*aTsyReqHandle*/) |
383 /** |
389 /** |
431 * @param aTsyReqHandle |
437 * @param aTsyReqHandle |
432 * @param aCallParams the call parameters |
438 * @param aCallParams the call parameters |
433 * @return KErrNone |
439 * @return KErrNone |
434 */ |
440 */ |
435 { |
441 { |
436 LOGVOICE3(">>CSimVoiceCall::AnswerIncomingCall 0x%08x, state %d entry ",this,iState); |
442 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALL_1, ">>CSimVoiceCall::AnswerIncomingCall 0x%08x, state %d entry ",(TUint)this,iState); |
437 |
443 |
438 //see where the answer request has orignated from |
444 //see where the answer request has orignated from |
439 if(aCallParams) |
445 if(aCallParams) |
440 { |
446 { |
441 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
447 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
442 RCall::TCallParams& callparams=(*callparamsPckg)(); |
448 RCall::TCallParams& callparams=(*callparamsPckg)(); |
443 |
449 |
444 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
450 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
445 { |
451 { |
446 LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCall request from Etel 3rd Party client."); |
452 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALL_2, "<<CSimVoiceCall::AnswerIncomingCall request from Etel 3rd Party client."); |
447 } |
453 } |
448 } |
454 } |
449 |
455 |
450 TInt ret=iLine->SetAutoAnswerCallObject(this); |
456 TInt ret=iLine->SetAutoAnswerCallObject(this); |
451 if(ret!=KErrNone) |
457 if(ret!=KErrNone) |
480 * |
486 * |
481 * @param aTsyReqHandle |
487 * @param aTsyReqHandle |
482 * @return KErrNone if successfully cancelled |
488 * @return KErrNone if successfully cancelled |
483 */ |
489 */ |
484 { |
490 { |
485 LOGVOICE1(">>CSimVoiceCall::AnswerIncomingCallCancel"); |
491 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLCANCEL_1, ">>CSimVoiceCall::AnswerIncomingCallCancel"); |
486 if(iAnswerIncomingCall.iNotifyPending) |
492 if(iAnswerIncomingCall.iNotifyPending) |
487 { |
493 { |
488 iAnswerIncomingCall.iNotifyPending=EFalse; |
494 iAnswerIncomingCall.iNotifyPending=EFalse; |
489 iLine->ResetAutoAnswerCallObject(this); |
495 iLine->ResetAutoAnswerCallObject(this); |
490 ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel); |
496 ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel); |
491 } |
497 } |
492 LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCallCancel"); |
498 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLCANCEL_2, "<<CSimVoiceCall::AnswerIncomingCallCancel"); |
493 return KErrNone; |
499 return KErrNone; |
494 } |
500 } |
495 |
501 |
496 TInt CSimVoiceCall::AnswerIncomingCallISVL(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams) |
502 TInt CSimVoiceCall::AnswerIncomingCallISVL(const TTsyReqHandle aTsyReqHandle,const TDesC8* aCallParams) |
497 /** |
503 /** |
502 * @param aTsyReqHandle |
508 * @param aTsyReqHandle |
503 * @param aCallParams the call parameters |
509 * @param aCallParams the call parameters |
504 * @return KErrNone |
510 * @return KErrNone |
505 */ |
511 */ |
506 { |
512 { |
507 LOGVOICE3(">>CSimVoiceCall::AnswerIncomingCallISV 0x%08x, state %d entry ",this,iState); |
513 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVL_1, ">>CSimVoiceCall::AnswerIncomingCallISV 0x%08x, state %d entry ",(TUint)this,iState); |
508 |
514 |
509 //see where the answer request has orignated from |
515 //see where the answer request has orignated from |
510 if(aCallParams) |
516 if(aCallParams) |
511 { |
517 { |
512 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
518 RCall::TCallParamsPckg* callparamsPckg=reinterpret_cast<RCall::TCallParamsPckg*>(const_cast<TDesC8*>(aCallParams)); |
513 RCall::TCallParams& callparams=(*callparamsPckg)(); |
519 RCall::TCallParams& callparams=(*callparamsPckg)(); |
514 |
520 |
515 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
521 if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) |
516 { |
522 { |
517 LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCallISV request from Etel 3rd Party client."); |
523 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVL_2, "<<CSimVoiceCall::AnswerIncomingCallISV request from Etel 3rd Party client."); |
518 } |
524 } |
519 } |
525 } |
520 |
526 |
521 TInt ret=iLine->SetAutoAnswerCallObject(this); |
527 TInt ret=iLine->SetAutoAnswerCallObject(this); |
522 if(ret!=KErrNone) |
528 if(ret!=KErrNone) |
553 * |
559 * |
554 * @param aTsyReqHandle |
560 * @param aTsyReqHandle |
555 * @return KErrNone if successfully cancelled |
561 * @return KErrNone if successfully cancelled |
556 */ |
562 */ |
557 { |
563 { |
558 LOGVOICE1(">>CSimVoiceCall::AnswerIncomingCallISVCancel"); |
564 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVCANCEL_1, ">>CSimVoiceCall::AnswerIncomingCallISVCancel"); |
559 if(iAnswerIncomingCall.iNotifyPending) |
565 if(iAnswerIncomingCall.iNotifyPending) |
560 { |
566 { |
561 iAnswerIncomingCall.iNotifyPending=EFalse; |
567 iAnswerIncomingCall.iNotifyPending=EFalse; |
562 iLine->ResetAutoAnswerCallObject(this); |
568 iLine->ResetAutoAnswerCallObject(this); |
563 ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel); |
569 ReqCompleted(iAnswerIncomingCall.iNotifyHandle,KErrCancel); |
564 } |
570 } |
565 LOGVOICE1("<<CSimVoiceCall::AnswerIncomingCallISVCancel"); |
571 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ANSWERINCOMINGCALLISVCANCEL_2, "<<CSimVoiceCall::AnswerIncomingCallISVCancel"); |
566 return KErrNone; |
572 return KErrNone; |
567 } |
573 } |
568 |
574 |
569 TInt CSimVoiceCall::Connect(const TTsyReqHandle aTsyReqHandle,const TDesC8* /*aCallParams*/) |
575 TInt CSimVoiceCall::Connect(const TTsyReqHandle aTsyReqHandle,const TDesC8* /*aCallParams*/) |
570 { |
576 { |
584 * |
590 * |
585 * @param aTsyReqHandle |
591 * @param aTsyReqHandle |
586 * @return KErrNone |
592 * @return KErrNone |
587 */ |
593 */ |
588 { |
594 { |
589 LOGVOICE1(">>CSimVoiceCall::HangUp"); |
595 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_HANGUP_1, ">>CSimVoiceCall::HangUp"); |
590 iHangUpRequestHandle=aTsyReqHandle; |
596 iHangUpRequestHandle=aTsyReqHandle; |
591 TInt ret=ActionEvent(ECallEventHangUp,KErrNone); |
597 TInt ret=ActionEvent(ECallEventHangUp,KErrNone); |
592 if(ret!=KErrNone) |
598 if(ret!=KErrNone) |
593 ReqCompleted(aTsyReqHandle,ret); |
599 ReqCompleted(aTsyReqHandle,ret); |
594 LOGVOICE1("<<CSimVoiceCall::HangUp"); |
600 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_HANGUP_2, "<<CSimVoiceCall::HangUp"); |
595 return KErrNone; |
601 return KErrNone; |
596 } |
602 } |
597 |
603 |
598 TInt CSimVoiceCall::HangUpCancel(const TTsyReqHandle /*aTsyReqHandle*/) |
604 TInt CSimVoiceCall::HangUpCancel(const TTsyReqHandle /*aTsyReqHandle*/) |
599 /** |
605 /** |
853 */ |
859 */ |
854 { |
860 { |
855 TInt ret=KErrNone; |
861 TInt ret=KErrNone; |
856 __ASSERT_ALWAYS(iState!=RMobileCall::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal)); |
862 __ASSERT_ALWAYS(iState!=RMobileCall::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal)); |
857 __ASSERT_ALWAYS(aEvent!=ECallEventNtRasConnected,SimPanic(ECallEventIllegal)); |
863 __ASSERT_ALWAYS(aEvent!=ECallEventNtRasConnected,SimPanic(ECallEventIllegal)); |
858 LOGVOICE3(">>CSimVoiceCall::ActionEvent 0x%08x %d",this,iState); |
864 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_1, ">>CSimVoiceCall::ActionEvent 0x%08x %d",(TUint)this,iState); |
859 |
865 |
860 switch(aEvent) |
866 switch(aEvent) |
861 { |
867 { |
862 case ECallEventDial: |
868 case ECallEventDial: |
863 LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventDial]"); |
869 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_2, ">>CSimVoiceCall::ActionEvent = [ECallEventDial]"); |
864 if(iState==RMobileCall::EStatusIdle) |
870 if(iState==RMobileCall::EStatusIdle) |
865 { |
871 { |
866 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusDialling,EFalse,EFalse)); |
872 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusDialling,EFalse,EFalse)); |
867 if(ret==KErrNone) |
873 if(ret==KErrNone) |
868 iTimer->Start(iDiallingPause,this); |
874 iTimer->Start(iDiallingPause,this); |
944 SimPanic(EIllegalStateInconsistancy); // This is checked before calling ActionEvent |
950 SimPanic(EIllegalStateInconsistancy); // This is checked before calling ActionEvent |
945 break; |
951 break; |
946 |
952 |
947 case ECallEventTimeOut: |
953 case ECallEventTimeOut: |
948 { |
954 { |
949 LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventTimeOut]"); |
955 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_7, ">>CSimVoiceCall::ActionEvent = [ECallEventTimeOut]"); |
950 switch(iState) |
956 switch(iState) |
951 { |
957 { |
952 case RMobileCall::EStatusDialling: |
958 case RMobileCall::EStatusDialling: |
953 LOGVOICE1(">>CSimVoiceCall::State = [EStatusDialling]"); |
959 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_8, ">>CSimVoiceCall::State = [EStatusDialling]"); |
954 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnecting,EFalse,EFalse)); |
960 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnecting,EFalse,EFalse)); |
955 if(ret==KErrNone) |
961 if(ret==KErrNone) |
956 iTimer->Start(iConnectingPause,this); |
962 iTimer->Start(iConnectingPause,this); |
957 return ret; |
963 return ret; |
958 |
964 |
959 case RMobileCall::EStatusConnecting: |
965 case RMobileCall::EStatusConnecting: |
960 LOGVOICE1(">>CSimVoiceCall::State = [EStatusConnecting]"); |
966 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_9, ">>CSimVoiceCall::State = [EStatusConnecting]"); |
961 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse)); |
967 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse)); |
962 UpdateRemotePartyInfoDirection(RMobileCall::EStatusConnecting); |
968 UpdateRemotePartyInfoDirection(RMobileCall::EStatusConnecting); |
963 ReqCompleted(iDialRequestHandle,ret); |
969 ReqCompleted(iDialRequestHandle,ret); |
964 return ret; |
970 return ret; |
965 |
971 |
966 case RMobileCall::EStatusDisconnecting: |
972 case RMobileCall::EStatusDisconnecting: |
967 LOGVOICE1(">>CSimVoiceCall::State = [EStatusDisconnecting]"); |
973 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_10, ">>CSimVoiceCall::State = [EStatusDisconnecting]"); |
968 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusIdle,EFalse,EFalse)); |
974 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusIdle,EFalse,EFalse)); |
969 ReqCompleted(iHangUpRequestHandle,ret); |
975 ReqCompleted(iHangUpRequestHandle,ret); |
970 return ret; |
976 return ret; |
971 |
977 |
972 case RMobileCall::EStatusAnswering: |
978 case RMobileCall::EStatusAnswering: |
973 LOGVOICE1(">>CSimVoiceCall::State = [EStatusAnswering]"); |
979 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_11, ">>CSimVoiceCall::State = [EStatusAnswering]"); |
974 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse)); |
980 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,EFalse,EFalse)); |
975 UpdateRemotePartyInfoDirection(RMobileCall::EStatusAnswering); |
981 UpdateRemotePartyInfoDirection(RMobileCall::EStatusAnswering); |
976 ReqCompleted(iAnswerIncomingCall.iNotifyHandle,ret); |
982 ReqCompleted(iAnswerIncomingCall.iNotifyHandle,ret); |
977 return ret; |
983 return ret; |
978 |
984 |
980 break; |
986 break; |
981 } |
987 } |
982 } |
988 } |
983 break; |
989 break; |
984 case ECallEventHold: |
990 case ECallEventHold: |
985 LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventHold]"); |
991 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_12, ">>CSimVoiceCall::ActionEvent = [ECallEventHold]"); |
986 __ASSERT_ALWAYS(iState==RMobileCall::EStatusConnected,SimPanic(EIllegalStateInconsistancy)); |
992 __ASSERT_ALWAYS(iState==RMobileCall::EStatusConnected,SimPanic(EIllegalStateInconsistancy)); |
987 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusHold,aOtherArgument == ECallEventSwap,EFalse)); |
993 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusHold,aOtherArgument == ECallEventSwap,EFalse)); |
988 if (ret == KErrNone) |
994 if (ret == KErrNone) |
989 ReqCompleted(iHoldResumeRequestHandle,ret); |
995 ReqCompleted(iHoldResumeRequestHandle,ret); |
990 break; |
996 break; |
991 |
997 |
992 case ECallEventResume: |
998 case ECallEventResume: |
993 LOGVOICE1(">>CSimVoiceCall::ActionEvent = [ECallEventResume]"); |
999 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_ACTIONEVENT_13, ">>CSimVoiceCall::ActionEvent = [ECallEventResume]"); |
994 __ASSERT_ALWAYS(iState==RMobileCall::EStatusHold,SimPanic(EIllegalStateInconsistancy)); |
1000 __ASSERT_ALWAYS(iState==RMobileCall::EStatusHold,SimPanic(EIllegalStateInconsistancy)); |
995 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,aOtherArgument == ECallEventSwap,EFalse)); |
1001 TRAP(ret, ret=ChangeStateL(RMobileCall::EStatusConnected,aOtherArgument == ECallEventSwap,EFalse)); |
996 if (ret == KErrNone) |
1002 if (ret == KErrNone) |
997 ReqCompleted(iHoldResumeRequestHandle,ret); |
1003 ReqCompleted(iHoldResumeRequestHandle,ret); |
998 break; |
1004 break; |
1013 /** |
1019 /** |
1014 * Timer callback function. When the timer goes off, it will call back into this |
1020 * Timer callback function. When the timer goes off, it will call back into this |
1015 * function for further processing. |
1021 * function for further processing. |
1016 */ |
1022 */ |
1017 { |
1023 { |
1018 LOGVOICE1(">>CSimVoiceCall::TimerCallBack"); |
1024 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_TIMERCALLBACK_1, ">>CSimVoiceCall::TimerCallBack"); |
1019 TInt ret=ActionEvent(ECallEventTimeOut,KErrNone); |
1025 TInt ret=ActionEvent(ECallEventTimeOut,KErrNone); |
1020 __ASSERT_ALWAYS(ret==KErrNone,SimPanic(ETimeOutEventActionFailed)); |
1026 __ASSERT_ALWAYS(ret==KErrNone,SimPanic(ETimeOutEventActionFailed)); |
1021 LOGVOICE1("<<CSimVoiceCall::TimerCallBack"); |
1027 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_TIMERCALLBACK_2, "<<CSimVoiceCall::TimerCallBack"); |
1022 } |
1028 } |
1023 |
1029 |
1024 TInt CSimVoiceCall::ProcessAnswerIncomingCallL() |
1030 TInt CSimVoiceCall::ProcessAnswerIncomingCallL() |
1025 /** |
1031 /** |
1026 * Answers an Incoming Call. |
1032 * Answers an Incoming Call. |
1027 * First the call state must be changed to "answering", then the flag indicating |
1033 * First the call state must be changed to "answering", then the flag indicating |
1028 * that an answer incoming call request is no longer pending. Finally, a new |
1034 * that an answer incoming call request is no longer pending. Finally, a new |
1029 * call object must be assigned to receive the details of the next incoming call. |
1035 * call object must be assigned to receive the details of the next incoming call. |
1030 */ |
1036 */ |
1031 { |
1037 { |
1032 LOGVOICE3(">>CSimVoiceCall::ProcessAnswerIncomingCall %d",iState,this); |
1038 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSANSWERINCOMINGCALLL_1, ">>CSimVoiceCall::ProcessAnswerIncomingCall %d , 0x%08x",iState,(TUint)this); |
1033 TInt ret=ChangeStateL(RMobileCall::EStatusAnswering,EFalse,EFalse); |
1039 TInt ret=ChangeStateL(RMobileCall::EStatusAnswering,EFalse,EFalse); |
1034 if(ret!=KErrNone) |
1040 if(ret!=KErrNone) |
1035 return ret; |
1041 return ret; |
1036 iTimer->Start(iAnswerIncomingPause,this); |
1042 iTimer->Start(iAnswerIncomingPause,this); |
1037 iAnswerIncomingCall.iNotifyPending=EFalse; |
1043 iAnswerIncomingCall.iNotifyPending=EFalse; |
1038 iLine->ResetAutoAnswerCallObject(this); |
1044 iLine->ResetAutoAnswerCallObject(this); |
1039 LOGVOICE1("<<CSimVoiceCall::ProcessAnswerIncomingCall"); |
1045 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSANSWERINCOMINGCALLL_2, "<<CSimVoiceCall::ProcessAnswerIncomingCall"); |
1040 return ret; |
1046 return ret; |
1041 } |
1047 } |
1042 |
1048 |
1043 TInt CSimVoiceCall::ProcessRemoteHangupL() |
1049 TInt CSimVoiceCall::ProcessRemoteHangupL() |
1044 /** |
1050 /** |
1046 * First the call state must be changed to "disconnecting", then the flag indicating |
1052 * First the call state must be changed to "disconnecting", then the flag indicating |
1047 * that a remote hangup request is no longer pending. Finally, a new |
1053 * that a remote hangup request is no longer pending. Finally, a new |
1048 * call object must be assigned to receive the next remote hangup request. |
1054 * call object must be assigned to receive the next remote hangup request. |
1049 */ |
1055 */ |
1050 { |
1056 { |
1051 LOGVOICE3(">>CSimVoiceCall::ProcessRemoteHangupL %d",iState,this); |
1057 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSREMOTEHANGUPL_1, ">>CSimVoiceCall::ProcessRemoteHangupL %d, 0x%08x",iState,(TUint)this); |
1052 TInt ret=ChangeStateL(RMobileCall::EStatusDisconnecting,EFalse,EFalse); |
1058 TInt ret=ChangeStateL(RMobileCall::EStatusDisconnecting,EFalse,EFalse); |
1053 if(ret!=KErrNone) |
1059 if(ret!=KErrNone) |
1054 return ret; |
1060 return ret; |
1055 iTimer->Start(iRemoteHangupPause,this); |
1061 iTimer->Start(iRemoteHangupPause,this); |
1056 iLine->ResetRemoteHangupCallObject(this); |
1062 iLine->ResetRemoteHangupCallObject(this); |
1057 LOGVOICE1("<<CSimVoiceCall::ProcessRemoteHangupL"); |
1063 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMVOICECALL_PROCESSREMOTEHANGUPL_2, "<<CSimVoiceCall::ProcessRemoteHangupL"); |
1058 return ret; |
1064 return ret; |
1059 } |
1065 } |
1060 |
1066 |
1061 void CSimVoiceCall::SetDtmfSession(CSimDtmf* aSimDtmf) |
1067 void CSimVoiceCall::SetDtmfSession(CSimDtmf* aSimDtmf) |
1062 /** |
1068 /** |