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". |
18 |
18 |
19 /** |
19 /** |
20 @file |
20 @file |
21 */ |
21 */ |
22 |
22 |
|
23 |
|
24 |
|
25 #include "OstTraceDefinitions.h" |
|
26 #ifdef OST_TRACE_COMPILER_IN_USE |
|
27 #include "CSimCallForwardingTraces.h" |
|
28 #endif |
|
29 |
23 #include <testconfigfileparser.h> |
30 #include <testconfigfileparser.h> |
24 #include "CSimCallForwarding.h" |
31 #include "CSimCallForwarding.h" |
25 #include "CSimPhone.h" |
32 #include "CSimPhone.h" |
26 #include "Simlog.h" |
|
27 |
33 |
28 const TInt KSettingListGranularity=5; // < The granularity used for parameter list arrays. |
34 const TInt KSettingListGranularity=5; // < The granularity used for parameter list arrays. |
29 const TInt KInvalidTimeout = -1; // Value used when timeout period does not matter |
35 const TInt KInvalidTimeout = -1; // Value used when timeout period does not matter |
30 const TInt KMobServiceIndxStart = 1; |
36 const TInt KMobServiceIndxStart = 1; |
31 const TInt KMobServiceIndxEnd = 6; |
37 const TInt KMobServiceIndxEnd = 6; |
57 /** |
63 /** |
58 Second phase of 2-Phase Constructor |
64 Second phase of 2-Phase Constructor |
59 Retrieves all the Call forwarding and Identity services tags from the config file |
65 Retrieves all the Call forwarding and Identity services tags from the config file |
60 */ |
66 */ |
61 { |
67 { |
62 LOGCALL1("Starting to parse Call Forwarding config parameters..."); |
68 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_CONSTRUCTL_1, "Starting to parse Call Forwarding config parameters..."); |
63 |
69 |
64 iIdentityServiceStatus=new(ELeave) CArrayFixFlat<TIdentityServiceStatus>(KSettingListGranularity); |
70 iIdentityServiceStatus=new(ELeave) CArrayFixFlat<TIdentityServiceStatus>(KSettingListGranularity); |
65 |
71 |
66 iGetCFStatus = new(ELeave) CArrayPtrFlat<CListReadAllAttempt>(1); |
72 iGetCFStatus = new(ELeave) CArrayPtrFlat<CListReadAllAttempt>(1); |
67 FindAndCreateCFListL(); |
73 FindAndCreateCFListL(); |
78 |
84 |
79 TInt status, service; |
85 TInt status, service; |
80 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,service); |
86 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,service); |
81 if(ret!=KErrNone) |
87 if(ret!=KErrNone) |
82 { |
88 { |
83 LOGPARSERR("service",ret,0,&KIdentityServiceStatus); |
89 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_CONSTRUCTL_2, "WARNING - CONFIGURATION FILE PARSING - Reading element SERVICE returned %d (element no. %d) from tag %s.",ret,0,KIdentityServiceStatus); |
84 continue; |
90 continue; |
85 } |
91 } |
86 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,status); |
92 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,status); |
87 if(ret!=KErrNone) |
93 if(ret!=KErrNone) |
88 { |
94 { |
89 LOGPARSERR("status",ret,1,&KIdentityServiceStatus); |
95 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_CONSTRUCTL_3, "WARNING - CONFIGURATION FILE PARSING - Reading element STATUS returned %d (element no. %d) from tag %s.",ret,1,KIdentityServiceStatus); |
90 continue; |
96 continue; |
91 } |
97 } |
92 |
98 |
93 TIdentityServiceStatus identityServiceStatus; |
99 TIdentityServiceStatus identityServiceStatus; |
94 identityServiceStatus.iService = static_cast<RMobilePhone::TMobilePhoneIdService>(service); |
100 identityServiceStatus.iService = static_cast<RMobilePhone::TMobilePhoneIdService>(service); |
95 identityServiceStatus.iStatus = static_cast<RMobilePhone::TMobilePhoneIdServiceStatus>(status); |
101 identityServiceStatus.iStatus = static_cast<RMobilePhone::TMobilePhoneIdServiceStatus>(status); |
96 iIdentityServiceStatus->AppendL(identityServiceStatus); |
102 iIdentityServiceStatus->AppendL(identityServiceStatus); |
97 } |
103 } |
98 |
104 |
99 LOGCALL1("...Finished parsing Call Forwarding config parameters..."); |
105 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_CONSTRUCTL_4, "...Finished parsing Call Forwarding config parameters..."); |
100 } |
106 } |
101 |
107 |
102 CSimCallForwarding::~CSimCallForwarding() |
108 CSimCallForwarding::~CSimCallForwarding() |
103 /** |
109 /** |
104 Destroy all the objects constructed. |
110 Destroy all the objects constructed. |
203 TPtrC8 number; |
209 TPtrC8 number; |
204 TInt condition, serviceGroup, status, timeout; // valid for CFRNy only |
210 TInt condition, serviceGroup, status, timeout; // valid for CFRNy only |
205 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,condition); |
211 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,condition); |
206 if(ret!=KErrNone) |
212 if(ret!=KErrNone) |
207 { |
213 { |
208 LOGPARSERR("condition",ret,0,&KCFList); |
214 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_FINDANDCREATECFLISTL_3, "WARNING - CONFIGURATION FILE PARSING - Reading element CONDITION returned %d (element no. %d) from tag %s.",ret,0,KCFList); |
209 continue; |
215 continue; |
210 } |
216 } |
211 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,serviceGroup); |
217 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,serviceGroup); |
212 if(ret!=KErrNone) |
218 if(ret!=KErrNone) |
213 { |
219 { |
214 LOGPARSERR("serviceGroup",ret,1,&KCFList); |
220 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_FINDANDCREATECFLISTL_4, "WARNING - CONFIGURATION FILE PARSING - Reading element SERVICEGROUP returned %d (element no. %d) from tag %s.",ret,1,KCFList); |
215 continue; |
221 continue; |
216 } |
222 } |
217 |
223 |
218 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,status); |
224 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,status); |
219 if(ret!=KErrNone) |
225 if(ret!=KErrNone) |
220 { |
226 { |
221 LOGPARSERR("status",ret,2,&KCFList); |
227 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_FINDANDCREATECFLISTL_5, "WARNING - CONFIGURATION FILE PARSING - Reading element STATUS returned %d (element no. %d) from tag %s.",ret,2,KCFList); |
222 continue; |
228 continue; |
223 } |
229 } |
224 |
230 |
225 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,timeout); |
231 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,timeout); |
226 if(ret!=KErrNone) |
232 if(ret!=KErrNone) |
227 { |
233 { |
228 LOGPARSERR("timeout",ret,3,&KCFList); |
234 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_FINDANDCREATECFLISTL_6, "WARNING - CONFIGURATION FILE PARSING - Reading element TIMEOUT returned %d (element no. %d) from tag %s.",ret,3,KCFList); |
229 continue; |
235 continue; |
230 } |
236 } |
231 |
237 |
232 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,number); |
238 ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,number); |
233 if(ret!=KErrNone) |
239 if(ret!=KErrNone) |
234 { |
240 { |
235 LOGPARSERR("number",ret,4,&KCFList); |
241 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_FINDANDCREATECFLISTL_7, "WARNING - CONFIGURATION FILE PARSING - Reading element NUMBER returned %d (element no. %d) from tag %s.",ret,4,KCFList); |
236 continue; |
242 continue; |
237 } |
243 } |
238 |
244 |
239 entry.iServiceGroup=(RMobilePhone::TMobileService)serviceGroup; |
245 entry.iServiceGroup=(RMobilePhone::TMobileService)serviceGroup; |
240 entry.iNumber.iTelNumber.Copy(number); |
246 entry.iNumber.iTelNumber.Copy(number); |
352 __ASSERT_ALWAYS(!iCFNotification.iCFChangeInfoNotificationPending,SimPanic(ENotificationReqAlreadyOutstanding)); |
358 __ASSERT_ALWAYS(!iCFNotification.iCFChangeInfoNotificationPending,SimPanic(ENotificationReqAlreadyOutstanding)); |
353 |
359 |
354 iCFNotification.iCFChangeInfoNotificationPending=ETrue; |
360 iCFNotification.iCFChangeInfoNotificationPending=ETrue; |
355 iCFNotification.iCFChangeInfoReqHandle=aReqHandle; |
361 iCFNotification.iCFChangeInfoReqHandle=aReqHandle; |
356 iCFNotification.iCurrentCFCondition=aCF; |
362 iCFNotification.iCurrentCFCondition=aCF; |
357 LOGCALL1("Finished CSimCallForwarding::NotifyCallForwardingStatusChange"); |
363 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_NOTIFYCALLFORWARDINGSTATUSCHANGE_1, "Finished CSimCallForwarding::NotifyCallForwardingStatusChange"); |
358 return KErrNone; |
364 return KErrNone; |
359 } |
365 } |
360 |
366 |
361 TInt CSimCallForwarding::NotifyCallForwardingStatusChangeCancel(const TTsyReqHandle aReqHandle) |
367 TInt CSimCallForwarding::NotifyCallForwardingStatusChangeCancel(const TTsyReqHandle aReqHandle) |
362 /** |
368 /** |
393 iCFNotification.iCFChangeInfoNotificationPending=EFalse; |
399 iCFNotification.iCFChangeInfoNotificationPending=EFalse; |
394 iPhone->ReqCompleted(iCFNotification.iCFChangeInfoReqHandle,KErrNone); |
400 iPhone->ReqCompleted(iCFNotification.iCFChangeInfoReqHandle,KErrNone); |
395 } |
401 } |
396 |
402 |
397 iPhone->ReqCompleted(aReqHandle,err); |
403 iPhone->ReqCompleted(aReqHandle,err); |
398 LOGCALL1("Finished CSimCallForwarding::SetCallForwardingStatus"); |
404 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_SETCALLFORWARDINGSTATUS_1, "Finished CSimCallForwarding::SetCallForwardingStatus"); |
399 return KErrNone; |
405 return KErrNone; |
400 } |
406 } |
401 |
407 |
402 TInt CSimCallForwarding::SetCallForwardingStatusCancel(const TTsyReqHandle aReqHandle) |
408 TInt CSimCallForwarding::SetCallForwardingStatusCancel(const TTsyReqHandle aReqHandle) |
403 /** |
409 /** |
418 1st phase retrieval of the status of call forwarding |
424 1st phase retrieval of the status of call forwarding |
419 @param aTsyReqHandle handle to the request |
425 @param aTsyReqHandle handle to the request |
420 @param aReqData contains details of the request |
426 @param aReqData contains details of the request |
421 @param aBufSize size of the buffer the client needs to allocate for phase 2 |
427 @param aBufSize size of the buffer the client needs to allocate for phase 2 |
422 */ |
428 */ |
423 LOGCALL1("CSimPhone::GetCallForwardingStatusPhase1"); |
429 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_GETCALLFORWARDINGSTATUSPHASE1_1, "CSimPhone::GetCallForwardingStatusPhase1"); |
424 TInt ret=KErrNone; |
430 TInt ret=KErrNone; |
425 |
431 |
426 // for forwarding we cannot querry for all conditions; |
432 // for forwarding we cannot querry for all conditions; |
427 // conditions - specific |
433 // conditions - specific |
428 // services - individual and all |
434 // services - individual and all |
437 TInt leaveCode=KErrNone; |
443 TInt leaveCode=KErrNone; |
438 TRAP(leaveCode, ret=ProcessGetCallForwardingStatusPhase1L(aTsyReqHandle, aReqData, aBufSize);); |
444 TRAP(leaveCode, ret=ProcessGetCallForwardingStatusPhase1L(aTsyReqHandle, aReqData, aBufSize);); |
439 if (leaveCode != KErrNone) |
445 if (leaveCode != KErrNone) |
440 iPhone->ReqCompleted(aTsyReqHandle,leaveCode); |
446 iPhone->ReqCompleted(aTsyReqHandle,leaveCode); |
441 } |
447 } |
442 LOGCALL1("CSimPhone::GetCallForwardingStatusPhase1"); |
448 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_GETCALLFORWARDINGSTATUSPHASE1_2, "CSimPhone::GetCallForwardingStatusPhase1"); |
443 return ret; |
449 return ret; |
444 } |
450 } |
445 |
451 |
446 TInt CSimCallForwarding::ProcessGetCallForwardingStatusPhase1L(const TTsyReqHandle aTsyReqHandle, |
452 TInt CSimCallForwarding::ProcessGetCallForwardingStatusPhase1L(const TTsyReqHandle aTsyReqHandle, |
447 CRetrieveMobilePhoneCFList::TGetCallForwardingRequest* aReqData, |
453 CRetrieveMobilePhoneCFList::TGetCallForwardingRequest* aReqData, |
453 @param aReqHandle Handle to the request |
459 @param aReqHandle Handle to the request |
454 @param aReqData information about the request |
460 @param aReqData information about the request |
455 @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase |
461 @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase |
456 */ |
462 */ |
457 |
463 |
458 LOGCALL1("CSimPhone::ProcessGetCallForwardingStatusPhase1L"); |
464 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_PROCESSGETCALLFORWARDINGSTATUSPHASE1L_1, "CSimPhone::ProcessGetCallForwardingStatusPhase1L"); |
459 |
465 |
460 CMobilePhoneCFList* list=CMobilePhoneCFList::NewL(); |
466 CMobilePhoneCFList* list=CMobilePhoneCFList::NewL(); |
461 CleanupStack::PushL(list); |
467 CleanupStack::PushL(list); |
462 |
468 |
463 TInt cnt=0;//Only interested by entries with a particular condition |
469 TInt cnt=0;//Only interested by entries with a particular condition |
501 |
507 |
502 CleanupStack::PopAndDestroy(list); // pop&destroy list |
508 CleanupStack::PopAndDestroy(list); // pop&destroy list |
503 |
509 |
504 // Complete first phase of list retrieval |
510 // Complete first phase of list retrieval |
505 iPhone->ReqCompleted(aTsyReqHandle,KErrNone); |
511 iPhone->ReqCompleted(aTsyReqHandle,KErrNone); |
506 LOGCALL1("CSimPhone::ProcessGetCallForwardingStatusPhase1L"); |
512 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_PROCESSGETCALLFORWARDINGSTATUSPHASE1L_2, "CSimPhone::ProcessGetCallForwardingStatusPhase1L"); |
507 return KErrNone; |
513 return KErrNone; |
508 } |
514 } |
509 |
515 |
510 TInt CSimCallForwarding::GetCallForwardingStatusPhase2(const TTsyReqHandle aTsyReqHandle, |
516 TInt CSimCallForwarding::GetCallForwardingStatusPhase2(const TTsyReqHandle aTsyReqHandle, |
511 RMobilePhone::TClientId* aClient, TDes8* aBuf) |
517 RMobilePhone::TClientId* aClient, TDes8* aBuf) |
514 @param aTsyRqHandle handle to the request |
520 @param aTsyRqHandle handle to the request |
515 @param aClient pointer to the client |
521 @param aClient pointer to the client |
516 @param aBuf buffer that contains the call forwarding list |
522 @param aBuf buffer that contains the call forwarding list |
517 */ |
523 */ |
518 { |
524 { |
519 LOGCALL1("CSimPhone::GetCallForwardingStatusPhase2"); |
525 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_GETCALLFORWARDINGSTATUSPHASE2_1, "CSimPhone::GetCallForwardingStatusPhase2"); |
520 CListReadAllAttempt* read=NULL; |
526 CListReadAllAttempt* read=NULL; |
521 // Find the get detected network attempt from this client |
527 // Find the get detected network attempt from this client |
522 for (TInt i=0; i<iGetCFStatus->Count(); ++i) |
528 for (TInt i=0; i<iGetCFStatus->Count(); ++i) |
523 { |
529 { |
524 read = iGetCFStatus->At(i); |
530 read = iGetCFStatus->At(i); |
533 iPhone->ReqCompleted(aTsyReqHandle,KErrNone); |
539 iPhone->ReqCompleted(aTsyReqHandle,KErrNone); |
534 return KErrNone; |
540 return KErrNone; |
535 } |
541 } |
536 } |
542 } |
537 // Should handle error case of not finding the matching client from read all phase 1 |
543 // Should handle error case of not finding the matching client from read all phase 1 |
538 LOGCALL1("CSimPhone::GetCallForwardingStatusPhase2"); |
544 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_GETCALLFORWARDINGSTATUSPHASE2_2, "CSimPhone::GetCallForwardingStatusPhase2"); |
539 return KErrNotFound; |
545 return KErrNotFound; |
540 } |
546 } |
541 |
547 |
542 |
548 |
543 TInt CSimCallForwarding::GetCallForwardingStatusCancel(const TTsyReqHandle aTsyReqHandle) |
549 TInt CSimCallForwarding::GetCallForwardingStatusCancel(const TTsyReqHandle aTsyReqHandle) |
544 { |
550 { |
545 /** |
551 /** |
546 Cancel the request to retrieve the status of call forwarding |
552 Cancel the request to retrieve the status of call forwarding |
547 @param aTsyReqHandle handle to the request |
553 @param aTsyReqHandle handle to the request |
548 */ |
554 */ |
549 LOGCALL1("CSimPhone::GetCallForwardingStatusCancel"); |
555 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_GETCALLFORWARDINGSTATUSCANCEL_1, "CSimPhone::GetCallForwardingStatusCancel"); |
550 iPhone->ReqCompleted(aTsyReqHandle,KErrNone); |
556 iPhone->ReqCompleted(aTsyReqHandle,KErrNone); |
551 // Remove the read all attempt from iGetCFStatus |
557 // Remove the read all attempt from iGetCFStatus |
552 CListReadAllAttempt* read=NULL; |
558 CListReadAllAttempt* read=NULL; |
553 for (TInt i=0; i<iGetCFStatus->Count(); ++i) |
559 for (TInt i=0; i<iGetCFStatus->Count(); ++i) |
554 { |
560 { |
559 iGetCFStatus->Delete(i); |
565 iGetCFStatus->Delete(i); |
560 break; |
566 break; |
561 } |
567 } |
562 } |
568 } |
563 iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); |
569 iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); |
564 LOGCALL1("CSimPhone::GetCallForwardingStatusCancel"); |
570 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSIMCALLFORWARDING_GETCALLFORWARDINGSTATUSCANCEL_2, "CSimPhone::GetCallForwardingStatusCancel"); |
565 return KErrNone; |
571 return KErrNone; |
566 } |
572 } |
567 |
573 |
568 void CSimCallForwarding::UpdateCFListL(RMobilePhone::TMobilePhoneCFCondition* aCF, |
574 void CSimCallForwarding::UpdateCFListL(RMobilePhone::TMobilePhoneCFCondition* aCF, |
569 RMobilePhone::TMobilePhoneCFChangeV1* aCFInfo ) |
575 RMobilePhone::TMobilePhoneCFChangeV1* aCFInfo ) |