63 // MACROS |
63 // MACROS |
64 //None |
64 //None |
65 |
65 |
66 // LOCAL CONSTANTS AND MACROS |
66 // LOCAL CONSTANTS AND MACROS |
67 |
67 |
68 const TUint8 KPhoneTransId = 6; //hard coded transaction ID |
68 const TUint8 KPhoneTransId = 6; |
69 const TUint8 KImsiSize = 8; |
|
70 const TUint8 KServiceProviderSize = 36; |
69 const TUint8 KServiceProviderSize = 36; |
71 const TUint8 KSpnFileSize = 16; |
70 const TUint8 KSpnFileSize = 16; |
72 |
71 |
73 const TUint8 KServiceAcl( 35 ); |
72 const TUint8 KServiceAcl( 35 ); |
74 const TUint8 KAclStateMask( 4 ); |
73 const TUint8 KAclStateMask( 4 ); |
75 const TUint8 KNumOfApnsIndex( 0 ); |
74 const TUint8 KNumOfApnsIndex( 0 ); |
76 const TUint8 KApnDataIndex( 1 ); |
75 const TUint8 KApnDataIndex( 1 ); |
|
76 const TUint8 KCpsLength( 18 ); |
|
77 const TUint8 KSpnLength( 17 ); |
|
78 const TUint8 KLineInfoLength( 1 ); |
|
79 const TUint8 KAclStatusLength( 1 ); |
|
80 |
|
81 const TUint8 KImsiSize = 9; |
|
82 const TUint8 KUnusedNibble = 0x0F; |
|
83 const TUint8 KImsiStringByteCount = 0; |
|
84 const TUint8 KFirstImsiDigit = 1; |
|
85 const TUint8 KSecondImsiDigit = 2; |
|
86 const TUint8 KNibbleMask = 0x0f; |
|
87 const TUint8 KNibbleShift = 4; |
77 |
88 |
78 // ------------------------------------------------------ |
89 // ------------------------------------------------------ |
79 // --- Alternate Line Service (ALS)-related constants --- |
90 // --- Alternate Line Service (ALS)-related constants --- |
80 // ------------------------------------------------------ |
91 // ------------------------------------------------------ |
81 // Consts for mapping the Als Line values, as used in SIMSON's |
92 // Consts for mapping the Als Line values, as used in SIMSON's |
82 // SIM_SERV_DYNAMIC_FLAGS_STR structure. |
93 // SIM_SERV_DYNAMIC_FLAGS_STR structure. |
83 const TUint8 KAlsAuxiliaryLine = 0x00; // ALS alternate line |
94 const TUint8 KAlsAuxiliaryLine = 0x00; |
84 const TUint8 KAlsPrimaryLine = 0x01; // ALS primary line |
95 const TUint8 KAlsPrimaryLine = 0x01; |
85 |
96 |
86 // ---------------------------------------------- |
97 // ---------------------------------------------- |
87 // --- (U)ICC Service Table-related constants --- |
98 // --- (U)ICC Service Table-related constants --- |
88 // ---------------------------------------------- |
99 // ---------------------------------------------- |
89 |
100 |
128 // Creates a new PhoneMessageHandler object instance. |
139 // Creates a new PhoneMessageHandler object instance. |
129 // -------------------------------------------------------------------------- |
140 // -------------------------------------------------------------------------- |
130 // |
141 // |
131 CMmPhoneMessHandler* CMmPhoneMessHandler::NewL |
142 CMmPhoneMessHandler* CMmPhoneMessHandler::NewL |
132 ( |
143 ( |
133 CMmPhoNetSender* aPhoNetSender, //a ptr to the phonet sender |
144 CMmPhoNetSender* aPhoNetSender, |
134 CMmPhoNetReceiver* aPhoNetReceiver, //a ptr to the phonet receiver |
145 CMmPhoNetReceiver* aPhoNetReceiver, |
135 CMmMessageRouter* aMessageRouter, // pointer to the msg router |
146 CMmMessageRouter* aMessageRouter, |
136 CMmSupplServMessHandler* aSupplServMessHandler, |
147 CMmSupplServMessHandler* aSupplServMessHandler, |
137 CMmUiccMessHandler* aUiccMessHandler |
148 CMmUiccMessHandler* aUiccMessHandler |
138 ) |
149 ) |
139 { |
150 { |
140 TFLOGSTRING("TSY: CMmPhoneMessHandler::NewL"); |
151 TFLOGSTRING("TSY: CMmPhoneMessHandler::NewL"); |
143 CMmPhoneMessHandler* phoneMessHandler = |
154 CMmPhoneMessHandler* phoneMessHandler = |
144 new ( ELeave ) CMmPhoneMessHandler(); |
155 new ( ELeave ) CMmPhoneMessHandler(); |
145 |
156 |
146 CleanupStack::PushL( phoneMessHandler ); |
157 CleanupStack::PushL( phoneMessHandler ); |
147 phoneMessHandler->iPhoNetSender = aPhoNetSender; |
158 phoneMessHandler->iPhoNetSender = aPhoNetSender; |
148 phoneMessHandler->ConstructL( aMessageRouter ); |
159 phoneMessHandler->ConstructL( |
149 phoneMessHandler->iSupplServMessHandler = aSupplServMessHandler; |
160 aMessageRouter, |
150 phoneMessHandler->iMmUiccMessHandler = aUiccMessHandler; |
161 aPhoNetSender, |
|
162 aSupplServMessHandler, |
|
163 aUiccMessHandler ); |
151 |
164 |
152 aPhoNetReceiver->RegisterL( |
165 aPhoNetReceiver->RegisterL( |
153 phoneMessHandler, |
166 phoneMessHandler, |
154 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING |
167 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING |
155 PN_INFO, |
168 PN_INFO, |
178 // Initialises object attributes. |
191 // Initialises object attributes. |
179 // -------------------------------------------------------------------------- |
192 // -------------------------------------------------------------------------- |
180 // |
193 // |
181 void CMmPhoneMessHandler::ConstructL |
194 void CMmPhoneMessHandler::ConstructL |
182 ( |
195 ( |
183 CMmMessageRouter* aMessageRouter |
196 CMmMessageRouter* aMessageRouter, |
|
197 CMmPhoNetSender* aPhoNetSender, |
|
198 CMmSupplServMessHandler* aSupplServMessHandler, |
|
199 CMmUiccMessHandler* aUiccMessHandler |
184 ) |
200 ) |
185 { |
201 { |
186 TFLOGSTRING("TSY: CMmPhoneMessHandler::ConstructL"); |
202 TFLOGSTRING("TSY: CMmPhoneMessHandler::ConstructL"); |
187 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_CONSTRUCTL, "CMmPhoneMessHandler::ConstructL" ); |
203 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_CONSTRUCTL, "CMmPhoneMessHandler::ConstructL" ); |
188 |
204 |
189 // Internal pointers, must be nulled before used. |
205 iPhoNetSender = aPhoNetSender; |
|
206 iSupplServMessHandler = aSupplServMessHandler; |
|
207 iMmUiccMessHandler = aUiccMessHandler; |
|
208 iMessageRouter = aMessageRouter; |
|
209 |
190 iSSTFileData = NULL; |
210 iSSTFileData = NULL; |
191 iStoreInfo = NULL; |
211 iStoreInfo = NULL; |
192 iLocIndex = 0; |
212 iLocIndex = 0; |
193 |
|
194 iMessageRouter = aMessageRouter; |
|
195 |
213 |
196 iCommonTSYRefreshPending = EFalse; |
214 iCommonTSYRefreshPending = EFalse; |
197 iRefreshError = EFalse; |
215 iRefreshError = EFalse; |
198 iCompleteRefresfDone = EFalse; |
216 iCompleteRefresfDone = EFalse; |
199 iInternalRefreshFiles = 0; |
217 iInternalRefreshFiles = 0; |
350 // -------------------------------------------------------------------------- |
365 // -------------------------------------------------------------------------- |
351 // |
366 // |
352 TInt CMmPhoneMessHandler::ExtFuncL |
367 TInt CMmPhoneMessHandler::ExtFuncL |
353 ( |
368 ( |
354 TInt aIpc, |
369 TInt aIpc, |
355 const CMmDataPackage* aDataPackage // Data package |
370 const CMmDataPackage* aDataPackage |
356 ) |
371 ) |
357 { |
372 { |
358 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ExtFuncL. Licensee specific implemtantion. IPC: %d", aIpc); |
373 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ExtFuncL. Licensee specific implemtantion. IPC: %d", aIpc); |
359 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_EXTFUNCL, "CMmPhoneMessHandler::ExtFuncL;Licensee specific implemtantion aIpc=%d", aIpc ); |
374 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_EXTFUNCL, "CMmPhoneMessHandler::ExtFuncL;Licensee specific implemtantion aIpc=%d", aIpc ); |
360 |
375 |
361 //*************************************************************// |
|
362 // NOTE. |
|
363 // |
|
364 // LICENSEE SPECIFIC MESSAGE HANDLER IMPLEMENTATION STARTS HERE |
|
365 // |
|
366 //*************************************************************// |
|
367 |
|
368 TInt ret( KErrNone ); |
376 TInt ret( KErrNone ); |
369 TUint8 transId( KPhoneTransId ); |
377 TUint8 transId( KPhoneTransId ); |
370 |
378 |
371 switch ( aIpc ) |
379 switch ( aIpc ) |
372 { |
380 { |
582 case PN_INFO: |
597 case PN_INFO: |
583 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */ |
598 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */ |
584 case PN_MODEM_INFO: |
599 case PN_MODEM_INFO: |
585 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */ |
600 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */ |
586 { |
601 { |
587 switch( messageId ) |
602 if ( INFO_SERIAL_NUMBER_READ_RESP == messageId ) |
588 { |
603 { |
589 case INFO_SERIAL_NUMBER_READ_RESP: |
604 InfoSerialNumberReadResp( aIsiMessage ); |
590 { |
605 } |
591 InfoSerialNumberReadResp( aIsiMessage ); |
606 else |
592 break; |
607 { |
593 } |
|
594 default: |
|
595 { |
|
596 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default.\n" ); |
608 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default.\n" ); |
597 OstTrace0( TRACE_NORMAL, DUP4_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default" ); |
609 OstTrace0( TRACE_NORMAL, DUP4_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default" ); |
598 break; |
|
599 } |
|
600 } |
610 } |
601 break; // end case PN_MODEM_INFO |
611 break; // end case PN_MODEM_INFO |
602 } |
612 } |
603 case PN_UICC: |
613 case PN_UICC: |
604 { |
614 { |
605 switch( messageId ) |
615 if ( UICC_REFRESH_IND == messageId ) |
606 { |
616 { |
607 case UICC_REFRESH_IND: |
617 UiccRefreshInd( aIsiMessage ); |
608 { |
618 } |
609 UiccRefreshInd( aIsiMessage ); |
619 else if ( UICC_REFRESH_RESP == messageId ) |
610 break; |
620 { |
611 } |
621 UiccRefreshResp( aIsiMessage ); |
612 case UICC_REFRESH_RESP: |
622 } |
613 { |
623 // No else |
614 UiccRefreshResp( aIsiMessage ); |
624 break; |
615 break; |
625 } |
616 } |
626 default: |
617 default: |
|
618 { |
|
619 break; |
|
620 } |
|
621 } |
|
622 break; |
|
623 } |
|
624 default: |
|
625 { |
627 { |
626 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - default.\n" ); |
628 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - default.\n" ); |
627 OstTrace0( TRACE_NORMAL, DUP5_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - default" ); |
629 OstTrace0( TRACE_NORMAL, DUP5_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - default" ); |
628 break; |
630 break; |
629 } |
631 } |
630 } // End of switch |
632 } // End of switch |
631 } |
633 } |
632 |
634 |
633 // -------------------------------------------------------------------------- |
635 // -------------------------------------------------------------------------- |
634 // CMmPhoneMessHandler::InfoSerialNumberReadReq |
636 // CMmPhoneMessHandler::InfoSerialNumberReadReq |
635 // Constructs INFO_SERIAL_NUMBER_READ_REQ ISI message.. |
637 // Constructs INFO_SERIAL_NUMBER_READ_REQ ISI message. |
636 // Returns KErrNone on success, other error value on failure. |
638 // Returns KErrNone on success, other error value on failure. |
637 // -------------------------------------------------------------------------- |
639 // -------------------------------------------------------------------------- |
638 // |
640 // |
639 TInt CMmPhoneMessHandler::InfoSerialNumberReadReq |
641 TInt CMmPhoneMessHandler::InfoSerialNumberReadReq |
640 ( |
642 ( |
641 TUint8 aTransactionId, // transaction id |
643 TUint8 aTransactionId, |
642 TUint8 aTarget // type of requested serial number |
644 TUint8 aTarget // type of requested serial number |
643 ) |
645 ) |
644 { |
646 { |
645 TFLOGSTRING("TSY: CMmPhoneMessHandler::InfoSerialNumberReadReq."); |
647 TFLOGSTRING("TSY: CMmPhoneMessHandler::InfoSerialNumberReadReq."); |
646 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADREQ, "CMmPhoneMessHandler::InfoSerialNumberReadReq" ); |
648 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADREQ, "CMmPhoneMessHandler::InfoSerialNumberReadReq" ); |
671 { |
673 { |
672 TInt err( KErrNotFound ); |
674 TInt err( KErrNotFound ); |
673 |
675 |
674 TBuf8<KSerialNumberLength> serialData; |
676 TBuf8<KSerialNumberLength> serialData; |
675 |
677 |
676 // Get status |
|
677 TUint8 status( aIsiMessage.Get8bit( |
678 TUint8 status( aIsiMessage.Get8bit( |
678 ISI_HEADER_SIZE + INFO_SERIAL_NUMBER_READ_RESP_OFFSET_STATUS ) ); |
679 ISI_HEADER_SIZE + INFO_SERIAL_NUMBER_READ_RESP_OFFSET_STATUS ) ); |
679 |
680 |
680 TFLOGSTRING2("TSY: CMmPhoneMessHandler::InfoSerialNumberReadResp, status=0x%02x",status); |
681 TFLOGSTRING2("TSY: CMmPhoneMessHandler::InfoSerialNumberReadResp, status=0x%02x",status); |
681 OstTraceExt1( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADRESP, "CMmPhoneMessHandler::InfoSerialNumberReadResp;status=%hhx", status ); |
682 OstTraceExt1( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADRESP, "CMmPhoneMessHandler::InfoSerialNumberReadResp;status=%hhx", status ); |
682 |
683 |
683 // If status is Ok get information from possible sub block(s). |
684 // Get information from possible sub block(s). |
684 if ( INFO_OK == status ) |
685 if ( INFO_OK == status ) |
685 { |
686 { |
|
687 TBool subblockFound( EFalse ); |
|
688 TUint sbSerialNumberStartOffset( 0 ); |
|
689 |
686 // If sub blocks |
690 // If sub blocks |
687 if ( 0 != aIsiMessage.Get8bit( |
691 if ( 0 != aIsiMessage.Get8bit( |
688 ISI_HEADER_SIZE + |
692 ISI_HEADER_SIZE + |
689 INFO_SERIAL_NUMBER_READ_RESP_OFFSET_SUBBLOCKCOUNT ) ) |
693 INFO_SERIAL_NUMBER_READ_RESP_OFFSET_SUBBLOCKCOUNT ) ) |
690 { |
694 { |
691 TUint sbSerialNumberStartOffset( 0 ); |
695 subblockFound = ETrue; |
692 |
696 } |
693 if ( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
697 |
694 ISI_HEADER_SIZE + SIZE_INFO_SERIAL_NUMBER_READ_RESP, |
698 if ( subblockFound && ( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
695 INFO_SB_SN_IMEI_PLAIN, |
699 ISI_HEADER_SIZE + SIZE_INFO_SERIAL_NUMBER_READ_RESP, |
696 EIsiSubBlockTypeId8Len8, |
700 INFO_SB_SN_IMEI_PLAIN, |
697 sbSerialNumberStartOffset ) ) |
701 EIsiSubBlockTypeId8Len8, |
698 { |
702 sbSerialNumberStartOffset ) ) ) |
699 // Read the string length - the zero terminator... |
703 { |
700 TUint8 strLength( aIsiMessage.Get8bit( |
704 // Read the string length - the zero terminator |
701 sbSerialNumberStartOffset + |
705 TUint8 strLength( aIsiMessage.Get8bit( |
702 INFO_SB_SN_IMEI_PLAIN_OFFSET_STRLEN ) - 1 ); |
706 sbSerialNumberStartOffset + |
703 // ...and compare it to the available buffer size |
707 INFO_SB_SN_IMEI_PLAIN_OFFSET_STRLEN ) - 1 ); |
704 // (50 bytes in etel), |
708 |
705 // and choose the shorter one strLength = |
709 TUint8 dataOffset( |
706 // ( RMobilePhone::KPhoneSerialNumberSize > strLength )? |
710 sbSerialNumberStartOffset + |
707 // strLength : RMobilePhone::KPhoneSerialNumberSize; |
711 INFO_SB_SN_IMEI_PLAIN_OFFSET_IMEIPLAINU8 ); |
708 |
712 |
709 TUint8 dataOffset( |
713 serialData.Append( aIsiMessage.GetData( |
710 sbSerialNumberStartOffset + |
714 dataOffset, |
711 INFO_SB_SN_IMEI_PLAIN_OFFSET_IMEIPLAINU8 ); |
715 strLength ).Left( KSerialNumberLength ) ); |
712 |
716 |
713 serialData.Append( aIsiMessage.GetData( |
717 err = KErrNone; |
714 dataOffset, |
718 } |
715 strLength ).Left( KSerialNumberLength ) ); |
719 } |
716 |
720 |
717 err = KErrNone; |
|
718 } |
|
719 } |
|
720 } |
|
721 |
|
722 // Complete to CommonTSY, ONLY if all data has already been received |
|
723 // packed parameter: TBuf8<KSerialNumberLength> serialData |
|
724 CMmDataPackage dataPackage; |
721 CMmDataPackage dataPackage; |
725 dataPackage.PackData( &serialData ); |
722 dataPackage.PackData( &serialData ); |
726 iMessageRouter->Complete( EMobilePhoneGetPhoneId, &dataPackage, err ); |
723 iMessageRouter->Complete( EMobilePhoneGetPhoneId, &dataPackage, err ); |
727 } |
724 } |
728 |
725 |
734 TInt CMmPhoneMessHandler::UiccReadDynamicFlagsReq() |
731 TInt CMmPhoneMessHandler::UiccReadDynamicFlagsReq() |
735 { |
732 { |
736 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadDynamicFlagsReq"); |
733 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadDynamicFlagsReq"); |
737 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADDYNAMICFLAGSREQ, "CMmPhoneMessHandler::UiccReadDynamicFlagsReq" ); |
734 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADDYNAMICFLAGSREQ, "CMmPhoneMessHandler::UiccReadDynamicFlagsReq" ); |
738 |
735 |
739 // Set parameters for UICC_APPL_CMD_REQ message |
736 return UiccApplCmdReq( |
740 TUiccWriteTransparent params; |
737 ETrIdReadDynamicFlags, |
741 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
738 UICC_APPL_READ_TRANSPARENT, |
742 params.trId = ETrIdReadDynamicFlags; |
739 0, |
743 params.dataOffset = 0; |
740 0, |
744 params.dataAmount = 0; |
741 KElemFileDynFlagsOrange, |
745 params.fileId = KElemFileDynFlagsOrange; |
742 UICC_SFI_NOT_PRESENT ); |
746 params.fileIdSfi = UICC_SFI_NOT_PRESENT; |
|
747 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
748 // File id path |
|
749 params.filePath.Append( KMasterFileId >> 8 ); |
|
750 params.filePath.Append( KMasterFileId ); |
|
751 params.filePath.Append( KOrangeDedicatedFile >> 8 ); |
|
752 params.filePath.Append( KOrangeDedicatedFile ); |
|
753 |
|
754 return iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
755 } |
743 } |
756 |
744 |
757 // -------------------------------------------------------------------------- |
745 // -------------------------------------------------------------------------- |
758 // CMmPhoneMessHandler::UiccWriteDynamicFlagsReq |
746 // CMmPhoneMessHandler::UiccWriteDynamicFlagsReq |
759 // Write dynamic flags |
747 // Write dynamic flags |
783 ret = KErrArgument; |
771 ret = KErrArgument; |
784 } |
772 } |
785 |
773 |
786 if ( KErrNone == ret ) |
774 if ( KErrNone == ret ) |
787 { |
775 { |
788 // Set parameters for UICC_APPL_CMD_REQ message |
776 TBuf8<KLineInfoLength> fileData; |
789 TUiccWriteTransparent params; |
777 fileData.Append( line ); |
790 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
778 ret = UiccApplCmdReq( |
791 params.trId = ETrIdWriteDynamicFlags; |
779 ETrIdWriteDynamicFlags, |
792 params.dataOffset = 0; |
780 UICC_APPL_UPDATE_TRANSPARENT, |
793 params.fileId = KElemFileDynFlagsOrange; |
781 0, |
794 params.fileIdSfi = UICC_SFI_NOT_PRESENT; |
782 0, |
795 params.serviceType = UICC_APPL_UPDATE_TRANSPARENT; |
783 KElemFileDynFlagsOrange, |
796 |
784 UICC_SFI_NOT_PRESENT, |
797 // File id path |
785 fileData); |
798 params.filePath.Append( KMasterFileId >> 8 ); |
786 } |
799 params.filePath.Append( KMasterFileId ); |
787 // No else |
800 params.filePath.Append( KOrangeDedicatedFile >> 8 ); |
788 |
801 params.filePath.Append( KOrangeDedicatedFile ); |
|
802 |
|
803 params.fileData.Append( line ); |
|
804 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
805 } |
|
806 return ret; |
789 return ret; |
807 } |
790 } |
808 |
791 |
809 // -------------------------------------------------------------------------- |
792 // -------------------------------------------------------------------------- |
810 // CMmPhoneMessHandler::UiccReadDynamicFlagsResp |
793 // CMmPhoneMessHandler::UiccReadDynamicFlagsResp |
873 TInt CMmPhoneMessHandler::UiccCspFileReq() |
856 TInt CMmPhoneMessHandler::UiccCspFileReq() |
874 { |
857 { |
875 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccCspFileReq"); |
858 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccCspFileReq"); |
876 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILEREQ, "CMmPhoneMessHandler::UiccCspFileReq" ); |
859 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILEREQ, "CMmPhoneMessHandler::UiccCspFileReq" ); |
877 |
860 |
878 // Set parameters for UICC_APPL_CMD_REQ message |
861 return UiccApplCmdReq( |
879 TUiccReadTransparent params; |
862 ETrIdReadCsp, |
880 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
863 UICC_APPL_READ_TRANSPARENT, |
881 params.trId = ETrIdReadCsp; |
864 18, |
882 params.dataAmount = 18; |
865 0, |
883 params.dataOffset = 0; // Read from first byte |
866 KElemFileCustomerServiceProfile, |
884 params.fileId = KElemFileCustomerServiceProfile; |
867 UICC_SFI_NOT_PRESENT ); |
885 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
886 |
|
887 // File id path |
|
888 params.filePath.Append( KMasterFileId >> 8 ); |
|
889 params.filePath.Append( KMasterFileId ); |
|
890 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
891 |
|
892 return iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
893 } |
868 } |
894 |
869 |
895 // -------------------------------------------------------------------------- |
870 // -------------------------------------------------------------------------- |
896 // CMmPhoneMessHandler::UiccCspFileResp |
871 // CMmPhoneMessHandler::UiccCspFileResp |
897 // Complete CSP |
872 // Complete CSP |
903 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccHandleCallFwdFlagsResp"); |
878 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccHandleCallFwdFlagsResp"); |
904 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILERESP, "CMmPhoneMessHandler::UiccCspFileResp" ); |
879 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILERESP, "CMmPhoneMessHandler::UiccCspFileResp" ); |
905 |
880 |
906 RMobilePhone::TMobilePhoneCspFileV1 cspFileEtel; |
881 RMobilePhone::TMobilePhoneCspFileV1 cspFileEtel; |
907 |
882 |
908 if ( aStatus == KErrNone ) |
883 if ( aStatus == KErrNone && ( KCpsLength <= aFileData.Length() ) ) |
909 { |
884 { |
910 TUint8 i( 0 ); |
885 TUint8 i( 0 ); |
911 // Call offering capabilities |
886 // Call offering capabilities |
912 if ( KUiccCspCallOfferingCode == aFileData[i++] ) |
887 if ( KUiccCspCallOfferingCode == aFileData[i++] ) |
913 { |
888 { |
959 // Value added services capabilities |
934 // Value added services capabilities |
960 if ( KUiccCspValueAddedServicesCode == aFileData[i++] ) |
935 if ( KUiccCspValueAddedServicesCode == aFileData[i++] ) |
961 { |
936 { |
962 cspFileEtel.iValueAddedServices = aFileData[i++]; |
937 cspFileEtel.iValueAddedServices = aFileData[i++]; |
963 } |
938 } |
964 } // End of if ( aStatus == KErrNone ) |
939 } // End of if |
965 else |
940 else |
966 { |
941 { |
967 aStatus = KErrNotFound; |
942 aStatus = KErrNotFound; |
968 } |
943 } |
969 |
944 |
970 // Complete with CSP data and error code |
|
971 CMmDataPackage dataPackage; |
945 CMmDataPackage dataPackage; |
972 dataPackage.PackData( &cspFileEtel ); |
946 dataPackage.PackData( &cspFileEtel ); |
973 |
947 |
974 iMessageRouter->Complete( |
948 iMessageRouter->Complete( |
975 EMobilePhoneGetCustomerServiceProfile, |
949 EMobilePhoneGetCustomerServiceProfile, |
985 TInt CMmPhoneMessHandler::UiccImsiReq( ) |
959 TInt CMmPhoneMessHandler::UiccImsiReq( ) |
986 { |
960 { |
987 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiReq"); |
961 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiReq"); |
988 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIREQ, "CMmPhoneMessHandler::UiccImsiReq" ); |
962 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIREQ, "CMmPhoneMessHandler::UiccImsiReq" ); |
989 |
963 |
990 // Set parameters for UICC_APPL_CMD_REQ message |
964 return UiccApplCmdReq( |
991 TUiccReadTransparent params; |
965 ETrIdReadImsi, |
992 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
966 UICC_APPL_READ_TRANSPARENT, |
993 params.trId = ETrIdReadImsi; |
967 9, |
994 params.dataAmount = 9; // Length + IMSI = 9 bytes |
968 0, |
995 params.dataOffset = 0; // Read from first byte |
969 KElemFileImsi, |
996 params.fileId = KElemFileImsi; |
970 7 ); |
997 params.fileIdSfi = 7; |
|
998 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
999 |
|
1000 // File id path |
|
1001 params.filePath.Append( KMasterFileId >> 8 ); |
|
1002 params.filePath.Append( KMasterFileId ); |
|
1003 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
1004 |
|
1005 return iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
1006 } |
971 } |
1007 |
972 |
1008 // -------------------------------------------------------------------------- |
973 // -------------------------------------------------------------------------- |
1009 // CMmPhoneMessHandler::UiccImsiResp |
974 // CMmPhoneMessHandler::UiccImsiResp |
1010 // Complete IMSI |
975 // Complete IMSI |
1015 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiResp" ); |
980 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiResp" ); |
1016 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIRESP, "CMmPhoneMessHandler::UiccImsiResp" ); |
981 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIRESP, "CMmPhoneMessHandler::UiccImsiResp" ); |
1017 |
982 |
1018 TInt err( KErrNone ); |
983 TInt err( KErrNone ); |
1019 TBuf8<RMobilePhone::KIMSISize> imsiData; |
984 TBuf8<RMobilePhone::KIMSISize> imsiData; |
1020 if ( UICC_STATUS_OK == aStatus ) |
985 |
1021 { |
986 if ( ( UICC_STATUS_OK == aStatus ) && |
1022 TUint8 i( 0 ); |
987 ( KImsiSize == aFileData.Length() ) ) |
1023 TUint8 valueMSB( 0 ); |
988 { |
1024 TUint8 valueLSB( 0 ); |
989 // 1st digit of the buffer is byte count (see 3GPP TS 51.011 |
1025 // Get length of IMSI (the first byte) |
990 // 10.3.2 EFIMSI (IMSI)). Get first IMSI number from second byte higher |
1026 TUint8 lengthOfImsi( aFileData[0] ); |
991 // nibbles. Lower part has parity information and it is ignored. |
1027 // Get the first IMSI number: MSB semioctet of byte 2 |
992 imsiData.AppendNum( |
1028 valueMSB = static_cast<TUint8>( aFileData[1] >> 4 ); |
993 ( ( aFileData[KFirstImsiDigit]>> KNibbleShift )&KNibbleMask ), |
1029 // Check the validity |
994 EDecimal ); |
1030 if ( KImsiSize >= lengthOfImsi && 10 > valueMSB ) |
995 |
1031 { |
996 for( TUint8 i = KSecondImsiDigit; |
1032 imsiData.AppendNum( valueMSB, EDecimal); |
997 i <= aFileData[KImsiStringByteCount]; |
1033 } |
998 i++ ) |
1034 else |
999 { |
1035 { |
1000 // Unused nibbles are set to 'F' so pack only valid digits. |
1036 err = KErrCorrupt; |
1001 if ( KUnusedNibble != aFileData[i]&KNibbleMask ) |
1037 } |
1002 { |
1038 |
1003 imsiData.AppendNum( ( ( aFileData[i]&KNibbleMask ) ), EDecimal ); |
1039 if ( KErrNone == err ) |
1004 } |
1040 { |
1005 else |
1041 // Check and append the rest of IMSI numbers |
1006 { |
1042 for ( i = 2; i <= lengthOfImsi; i++ ) |
1007 // Last digit found. |
1043 { |
1008 break; |
1044 valueLSB = static_cast<TUint8>( aFileData[i] & 0x0F ); |
1009 } |
1045 valueMSB = static_cast<TUint8>( aFileData[i] >> 4 ); |
1010 if ( KUnusedNibble != ( ( aFileData[i]>>KNibbleShift )&KNibbleMask ) ) |
1046 |
1011 { |
1047 // If both values are valid |
1012 imsiData.AppendNum( |
1048 if ( 10 > valueLSB && 10 > valueMSB ) |
1013 ( ( aFileData[i]>>KNibbleShift )&KNibbleMask ), |
1049 { |
1014 EDecimal ); |
1050 imsiData.AppendNum( valueLSB, EDecimal); |
1015 } |
1051 imsiData.AppendNum( valueMSB, EDecimal); |
1016 else |
1052 } |
1017 { |
1053 // Last nibble is unused |
1018 // Last digit found. |
1054 else if( 10 > valueLSB && 0xF == valueMSB ) |
1019 break; |
1055 { |
1020 } |
1056 imsiData.AppendNum( valueLSB, EDecimal); |
1021 } |
1057 break; |
1022 err = KErrNone; |
1058 } |
|
1059 // Either is invalid |
|
1060 else |
|
1061 { |
|
1062 err = KErrCorrupt; |
|
1063 break; |
|
1064 } |
|
1065 } |
|
1066 } |
|
1067 } |
1023 } |
1068 else |
1024 else |
1069 { |
1025 { |
1070 err = KErrNotFound; |
1026 err = KErrNotFound; |
1071 } |
1027 } |
1072 |
1028 |
1073 // Complete with packed parameter |
|
1074 CMmDataPackage dataPackage; |
1029 CMmDataPackage dataPackage; |
1075 dataPackage.PackData( &imsiData ); |
1030 dataPackage.PackData( &imsiData ); |
1076 |
1031 |
1077 iMessageRouter->Complete( |
1032 iMessageRouter->Complete( |
1078 EMobilePhoneGetSubscriberId, |
1033 EMobilePhoneGetSubscriberId, |
1088 TInt CMmPhoneMessHandler::UiccReadServiceProviderName() |
1043 TInt CMmPhoneMessHandler::UiccReadServiceProviderName() |
1089 { |
1044 { |
1090 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderName"); |
1045 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderName"); |
1091 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAME, "CMmPhoneMessHandler::UiccReadServiceProviderName" ); |
1046 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAME, "CMmPhoneMessHandler::UiccReadServiceProviderName" ); |
1092 |
1047 |
1093 // Read SIM file '6F46', Service Provider Name |
1048 return UiccApplCmdReq( |
1094 // Set parameters for UICC_APPL_CMD_REQ message |
1049 ETrIdReadServiceProviderName, |
1095 TUiccReadTransparent params; |
1050 UICC_APPL_READ_TRANSPARENT, |
1096 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
1051 17, |
1097 params.trId = ETrIdReadServiceProviderName; |
1052 0, |
1098 // Read all 17 bytes |
1053 KElemFileServiceProviderName, |
1099 params.dataAmount = 17; |
1054 UICC_SFI_NOT_PRESENT ); |
1100 params.dataOffset = 0; |
|
1101 params.fileId = KElemFileServiceProviderName; |
|
1102 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
1103 |
|
1104 // File id path |
|
1105 params.filePath.Append( KMasterFileId >> 8 ); |
|
1106 params.filePath.Append( KMasterFileId ); |
|
1107 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
1108 |
|
1109 return iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
1110 } |
1055 } |
1111 |
1056 |
1112 // -------------------------------------------------------------------------- |
1057 // -------------------------------------------------------------------------- |
1113 // CMmPhoneMessHandler::UiccReadServiceProviderNameResp |
1058 // CMmPhoneMessHandler::UiccReadServiceProviderNameResp |
1114 // Complete service provider name |
1059 // Complete service provider name |
1119 const TDesC8& aFileData ) |
1064 const TDesC8& aFileData ) |
1120 { |
1065 { |
1121 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderNameResp"); |
1066 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderNameResp"); |
1122 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAMERESP, "CMmPhoneMessHandler::UiccReadServiceProviderNameResp" ); |
1067 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAMERESP, "CMmPhoneMessHandler::UiccReadServiceProviderNameResp" ); |
1123 |
1068 |
1124 TInt ret( KErrNone ); |
1069 TInt ret( KErrNotFound ); |
1125 if ( KErrNone == aStatus ) |
1070 if ( KErrNone == aStatus && ( KSpnLength == aFileData.Length() ) ) |
1126 { |
1071 { |
1127 // Store data and read SPN display info |
1072 // Store data and read SPN display info |
1128 ret = UiccProcessServiceTypeCheck( aFileData ); |
1073 ret = UiccProcessServiceTypeCheck( aFileData ); |
1129 } |
1074 } |
1130 |
1075 |
1228 const TDesC8& aFileData ) |
1173 const TDesC8& aFileData ) |
1229 { |
1174 { |
1230 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck"); |
1175 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck"); |
1231 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCPROCESSSERVICETYPECHECK, "CMmPhoneMessHandler::UiccProcessServiceTypeCheck" ); |
1176 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCPROCESSSERVICETYPECHECK, "CMmPhoneMessHandler::UiccProcessServiceTypeCheck" ); |
1232 |
1177 |
1233 // Copy service provider name, starting from byte 2 |
|
1234 TBuf8<KSpnFileSize> spnBuffer( aFileData.Mid( 1 ) ); |
1178 TBuf8<KSpnFileSize> spnBuffer( aFileData.Mid( 1 ) ); |
1235 TBuf8<KServiceProviderSize> spnOutputBuffer; |
1179 TBuf8<KServiceProviderSize> spnOutputBuffer; |
1236 CMmStaticUtility::ConvertGsmDataToUcs2( |
1180 CMmStaticUtility::ConvertGsmDataToUcs2( |
1237 spnBuffer, |
1181 spnBuffer, |
1238 KSpnFileSize, |
1182 KSpnFileSize, |
1264 if ( 0 == ( displayCondition & 0x02 ) ) |
1208 if ( 0 == ( displayCondition & 0x02 ) ) |
1265 { |
1209 { |
1266 iSecondDisplayCondition = RMobilePhone::KDisplaySPNRequired; |
1210 iSecondDisplayCondition = RMobilePhone::KDisplaySPNRequired; |
1267 } |
1211 } |
1268 |
1212 |
1269 // PLMN and SPN control information summed up to iDisplayReq field |
|
1270 iServiceProviderName.iDisplayReq = |
1213 iServiceProviderName.iDisplayReq = |
1271 iServiceProviderName.iDisplayReq + iSecondDisplayCondition; |
1214 iServiceProviderName.iDisplayReq + iSecondDisplayCondition; |
1272 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - display condition: %d", (TUint8)iServiceProviderName.iDisplayReq); |
1215 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - display condition: %d", (TUint8)iServiceProviderName.iDisplayReq); |
1273 |
1216 |
1274 // Buffer for service provider name |
|
1275 TBuf16<KSpnFileSize> tempBuf; |
1217 TBuf16<KSpnFileSize> tempBuf; |
1276 TIsiUtility::CopyFromBigEndian( spnOutputBuffer, tempBuf ); |
1218 TIsiUtility::CopyFromBigEndian( spnOutputBuffer, tempBuf ); |
1277 // Copy service provider name |
1219 // Copy service provider name |
1278 iServiceProviderName.iSPName.Copy( tempBuf ); |
1220 iServiceProviderName.iSPName.Copy( tempBuf ); |
1279 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - SPN Name: %S", &iServiceProviderName.iSPName); |
1221 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - SPN Name: %S", &iServiceProviderName.iSPName); |
1280 |
1222 |
1281 |
1223 |
1282 // We still need to get the PLMN list to complete the information. |
1224 // We still need to get the PLMN list to complete the information. |
1283 // Read the SIM file EF SPDI ('6FCD') |
1225 // Read the SIM file EF SPDI ('6FCD') |
1284 // Set parameters for UICC_APPL_CMD_REQ message |
1226 return UiccApplCmdReq( |
1285 TUiccReadTransparent params; |
1227 ETrIdReadServiceProviderDisplayInfo, |
1286 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
1228 UICC_APPL_READ_TRANSPARENT, |
1287 params.trId = ETrIdReadServiceProviderDisplayInfo; |
1229 0, |
1288 // Read all the data |
1230 0, |
1289 params.dataAmount = 0; |
1231 KElemFileServiceProviderDisplayInfo, |
1290 params.dataOffset = 0; |
1232 0x1B ); |
1291 params.fileId = KElemFileServiceProviderDisplayInfo; |
|
1292 params.fileIdSfi = 0x1B; |
|
1293 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
1294 |
|
1295 // File id path |
|
1296 params.filePath.Append( KMasterFileId >> 8 ); |
|
1297 params.filePath.Append( KMasterFileId ); |
|
1298 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
1299 |
|
1300 return iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
1301 } |
1233 } |
1302 |
1234 |
1303 // -------------------------------------------------------------------------- |
1235 // -------------------------------------------------------------------------- |
1304 // CMmPhoneMessHandler::UiccProcessSpnNameInfo |
1236 // CMmPhoneMessHandler::UiccProcessSpnNameInfo |
1305 // Processes SPN name info response |
1237 // Processes SPN name info response |
1375 } |
1305 } |
1376 |
1306 |
1377 // Copy PLMNs and complete |
1307 // Copy PLMNs and complete |
1378 if ( KErrNone == aStatus ) |
1308 if ( KErrNone == aStatus ) |
1379 { |
1309 { |
1380 // Number of PLMNs cannot exceed 170 |
|
1381 if ( 170 < numOfPlmns ) |
1310 if ( 170 < numOfPlmns ) |
1382 { |
1311 { |
1383 numOfPlmns = 170; |
1312 numOfPlmns = 170; |
1384 } |
1313 } |
1385 |
1314 |
1386 // At first append number of PLMNs and second display condition |
|
1387 TUint16 word( static_cast<TUint16>( |
1315 TUint16 word( static_cast<TUint16>( |
1388 numOfPlmns << 8 | iSecondDisplayCondition ) ); |
1316 numOfPlmns << 8 | iSecondDisplayCondition ) ); |
1389 iServiceProviderName.iPLMNField.Append( word ); |
1317 iServiceProviderName.iPLMNField.Append( word ); |
1390 |
1318 |
1391 // Copy PLMNs to 16 bit buffer |
|
1392 for ( TUint8 j( 0 ); j < lengthOfDataInBytes / 2; j++, i += 2 ) |
1319 for ( TUint8 j( 0 ); j < lengthOfDataInBytes / 2; j++, i += 2 ) |
1393 { |
1320 { |
1394 // PLMN entries are copied to 16-bit buffer as follows: |
1321 // PLMN entries are copied to 16-bit buffer as follows: |
1395 // 1st byte to 8 LSB bits of 16-bit buffer |
1322 // 1st byte to 8 LSB bits of 16-bit buffer |
1396 // 2nd byte to 8 MSB bits of 16-bit buffer |
1323 // 2nd byte to 8 MSB bits of 16-bit buffer |
1397 word = static_cast<TUint16>( |
1324 word = static_cast<TUint16>( |
1398 ( aFileData[i+1] << 8 ) | aFileData[i] ); |
1325 ( aFileData[i+1] << 8 ) | aFileData[i] ); |
1399 iServiceProviderName.iPLMNField.Append( word ); |
1326 iServiceProviderName.iPLMNField.Append( word ); |
1400 } |
1327 } |
1401 // Last word is added |
1328 |
1402 iServiceProviderName.iPLMNField.Append( ( 0xFF << 8 ) | aFileData[i] ); |
1329 iServiceProviderName.iPLMNField.Append( ( 0xFF << 8 ) | aFileData[i] ); |
1403 |
1330 |
1404 // Complete SPN info |
|
1405 CMmDataPackage dataPackage; |
1331 CMmDataPackage dataPackage; |
1406 dataPackage.PackData( &iServiceProviderName ); |
1332 dataPackage.PackData( &iServiceProviderName ); |
1407 iMessageRouter->Complete( |
1333 iMessageRouter->Complete( |
1408 EMobilePhoneGetServiceProviderName, |
1334 EMobilePhoneGetServiceProviderName, |
1409 &dataPackage, |
1335 &dataPackage, |
1410 KErrNone ); |
1336 KErrNone ); |
1411 } |
1337 } |
1412 else // Complete error without data |
1338 else |
1413 { |
1339 { |
1414 iMessageRouter->Complete( |
1340 iMessageRouter->Complete( |
1415 EMobilePhoneGetServiceProviderName, |
1341 EMobilePhoneGetServiceProviderName, |
1416 KErrNotFound ); |
1342 KErrNotFound ); |
1417 } |
1343 } |
1418 |
1344 |
1419 // Reset iServiceProviderName for next time. |
|
1420 iServiceProviderName.iSPName.Zero(); |
1345 iServiceProviderName.iSPName.Zero(); |
1421 iServiceProviderName.iPLMNField.Zero(); |
1346 iServiceProviderName.iPLMNField.Zero(); |
1422 } |
1347 } |
1423 |
1348 |
1424 // -------------------------------------------------------------------------- |
1349 // -------------------------------------------------------------------------- |
1701 // responsible of making phonebook initialization. => No need for |
1625 // responsible of making phonebook initialization. => No need for |
1702 // internal initialization. |
1626 // internal initialization. |
1703 if ( !( refreshFiles & KCacheAdn ) |
1627 if ( !( refreshFiles & KCacheAdn ) |
1704 && !( refreshFiles & KCacheFdn ) ) |
1628 && !( refreshFiles & KCacheFdn ) ) |
1705 { |
1629 { |
1706 // Creating buffer for phonebook's name |
|
1707 TName phonebookName; |
1630 TName phonebookName; |
1708 phonebookName.Copy( KInternalPhoneBookType ); |
1631 phonebookName.Copy( KInternalPhoneBookType ); |
1709 |
1632 |
1710 CPhoneBookDataPackage package; |
1633 CPhoneBookDataPackage package; |
1711 package.SetPhoneBookName( phonebookName ); |
1634 package.SetPhoneBookName( phonebookName ); |
1724 iCommonTSYRefreshPending = ETrue; |
1647 iCommonTSYRefreshPending = ETrue; |
1725 |
1648 |
1726 TFLOGSTRING2("TSY: CMmPhoneMessHandler::HandleUiccRefresh: CommonTSY Refresh Pending = %d", iCommonTSYRefreshPending ); |
1649 TFLOGSTRING2("TSY: CMmPhoneMessHandler::HandleUiccRefresh: CommonTSY Refresh Pending = %d", iCommonTSYRefreshPending ); |
1727 OstTrace1( TRACE_NORMAL, DUP15_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh;iCommonTSYRefreshPending=%d", iCommonTSYRefreshPending ); |
1650 OstTrace1( TRACE_NORMAL, DUP15_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh;iCommonTSYRefreshPending=%d", iCommonTSYRefreshPending ); |
1728 |
1651 |
1729 // Packed parameter: List of files needed to be refreshed. |
|
1730 CMmDataPackage dataPackage; |
1652 CMmDataPackage dataPackage; |
1731 dataPackage.PackData( &refreshFiles ); |
1653 dataPackage.PackData( &refreshFiles ); |
1732 |
1654 |
1733 // Complete. This will start the cache update process. |
1655 // Complete. This will start the cache update process. |
1734 iMessageRouter->Complete( |
1656 iMessageRouter->Complete( |
1735 EMmTsySimRefreshNowIPC, |
1657 EMmTsySimRefreshNowIPC, |
1736 &dataPackage, |
1658 &dataPackage, |
1737 KErrNone ); |
1659 KErrNone ); |
1738 } |
1660 } |
1739 |
1661 |
1740 // Send refresh done to UICC only if there's no CTSY/NTSY |
|
1741 // caching ongoing. |
|
1742 if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles ) |
1662 if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles ) |
1743 { |
1663 { |
1744 UiccRefreshReq( UICC_REFRESH_DONE ); |
1664 UiccRefreshReq( UICC_REFRESH_DONE ); |
1745 } |
1665 } |
1746 } |
1666 } |
1919 TInt ret( KErrNone ); |
1839 TInt ret( KErrNone ); |
1920 |
1840 |
1921 if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() && |
1841 if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() && |
1922 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
1842 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
1923 { |
1843 { |
1924 // Set parameters for UICC_APPL_CMD_REQ message |
1844 ret = UiccApplCmdReq( |
1925 TUiccReadTransparent params; |
1845 ETrIdAclStatusReadEfEst, |
1926 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
1846 UICC_APPL_READ_TRANSPARENT, |
1927 params.trId = ETrIdAclStatusReadEfEst; |
1847 0, |
1928 params.dataAmount = 0; |
1848 0, |
1929 params.dataOffset = 0; |
1849 KElemEst, |
1930 params.fileId = KElemEst; |
1850 5 ); |
1931 params.fileIdSfi = 0x05; |
|
1932 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
1933 |
|
1934 // File id path |
|
1935 params.filePath.Append( KMasterFileId >> 8 ); |
|
1936 params.filePath.Append( KMasterFileId ); |
|
1937 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
1938 |
|
1939 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
1940 } |
1851 } |
1941 else |
1852 else |
1942 { |
1853 { |
1943 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust"); |
1854 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust"); |
1944 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADEFESTREQ, "CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust" ); |
1855 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADEFESTREQ, "CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust" ); |
1980 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus); |
1891 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus); |
1981 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCGETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus ); |
1892 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCGETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus ); |
1982 ret = KErrAccessDenied; |
1893 ret = KErrAccessDenied; |
1983 } |
1894 } |
1984 |
1895 |
1985 // complete with packed parameter |
|
1986 CMmDataPackage dataPackage; |
1896 CMmDataPackage dataPackage; |
1987 |
1897 |
1988 if( KErrNone == ret ) |
1898 if( KErrNone == ret ) |
1989 { |
1899 { |
1990 dataPackage.PackData( &aclStatus ); |
1900 dataPackage.PackData( &aclStatus ); |
1991 } |
1901 } |
1992 |
1902 |
1993 iACLIsProgress = EFalse; //set ACL flag |
1903 iACLIsProgress = EFalse; |
1994 iMessageRouter->Complete( |
1904 iMessageRouter->Complete( |
1995 EMobilePhoneGetAPNControlListServiceStatus, |
1905 EMobilePhoneGetAPNControlListServiceStatus, |
1996 &dataPackage, |
1906 &dataPackage, |
1997 ret ); |
1907 ret ); |
1998 } |
1908 } |
2009 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp"); |
1919 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp"); |
2010 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp" ); |
1920 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp" ); |
2011 |
1921 |
2012 TInt ret( KErrNone ); |
1922 TInt ret( KErrNone ); |
2013 TBool completeNeeded( ETrue ); |
1923 TBool completeNeeded( ETrue ); |
2014 |
1924 TUint8 aclState( 0 ); |
2015 if( UICC_STATUS_OK == aStatus ) |
1925 |
2016 { |
1926 if ( 0 < aFileData.Length() ) |
2017 TUint8 aclState( aFileData[0] ); |
1927 { |
2018 if( aclState & KAclStateMask ) |
1928 aclState = aFileData[0]; |
2019 { |
1929 } |
2020 if( RMobilePhone::EAPNControlListServiceDisabled == iAclStatus ) |
1930 |
2021 { |
1931 if ( ( UICC_STATUS_OK == aStatus ) && ( aclState & KAclStateMask ) ) |
2022 // ACL state is enabled and we need to set it to disabled . |
1932 { |
2023 // So EFest needs to be updated |
1933 if ( RMobilePhone::EAPNControlListServiceDisabled == iAclStatus ) |
2024 completeNeeded = EFalse; |
1934 { |
2025 UiccSetAclStatusWriteEfEstReq( aclState ); |
1935 // ACL state is enabled and we need to set it to disabled. |
2026 } |
1936 // So EFest needs to be updated |
2027 else |
1937 completeNeeded = EFalse; |
2028 { |
1938 UiccSetAclStatusWriteEfEstReq( aclState ); |
2029 // ACL status already correct, let's complete |
1939 } |
|
1940 else |
|
1941 { |
|
1942 // ACL status already correct, let's complete |
2030 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete"); |
1943 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete"); |
2031 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" ); |
1944 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" ); |
2032 } |
1945 } |
|
1946 } |
|
1947 else if ( ( UICC_STATUS_OK == aStatus ) && ( ! aclState & KAclStateMask ) ) |
|
1948 { |
|
1949 if ( RMobilePhone::EAPNControlListServiceEnabled == iAclStatus ) |
|
1950 { |
|
1951 // EFest needs to be updated |
|
1952 completeNeeded = EFalse; |
|
1953 UiccSetAclStatusWriteEfEstReq( aclState ); |
2033 } |
1954 } |
2034 else |
1955 else |
2035 { |
1956 { |
2036 if( RMobilePhone::EAPNControlListServiceEnabled == iAclStatus ) |
1957 // ACL status already correct, let's complete |
2037 { |
|
2038 // EFest needs to be updated |
|
2039 completeNeeded = EFalse; |
|
2040 UiccSetAclStatusWriteEfEstReq( aclState ); |
|
2041 } |
|
2042 else |
|
2043 { |
|
2044 // ACL status already correct, let's complete |
|
2045 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete"); |
1958 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete"); |
2046 OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" ); |
1959 OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" ); |
2047 } |
|
2048 } |
1960 } |
2049 } |
1961 } |
2050 else |
1962 else |
2051 { |
1963 { |
2052 // EFest reading failed |
1964 // EFest reading failed |
2068 // ---------------------------------------------------------------------------- |
1979 // ---------------------------------------------------------------------------- |
2069 // CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq |
1980 // CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq |
2070 // Writes ACL status to EFest |
1981 // Writes ACL status to EFest |
2071 // ---------------------------------------------------------------------------- |
1982 // ---------------------------------------------------------------------------- |
2072 // |
1983 // |
2073 TInt CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq( TUint8 aOldAclState ) |
1984 TInt CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq( TUint8 aOldAclState ) |
2074 { |
1985 { |
2075 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq"); |
1986 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq"); |
2076 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq" ); |
1987 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq" ); |
2077 |
1988 |
2078 TInt ret( KErrNone ); |
1989 TInt ret( KErrNone ); |
2091 } |
2002 } |
2092 |
2003 |
2093 if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() && |
2004 if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() && |
2094 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
2005 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
2095 { |
2006 { |
2096 TUiccWriteTransparent params; |
2007 TBuf8<KAclStatusLength> fileData; |
2097 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
2008 fileData.Append( newState ); |
2098 params.trId = ETrIdAclStatusWriteEfEst; |
2009 ret = UiccApplCmdReq( |
2099 params.dataOffset = 0; |
2010 ETrIdAclStatusWriteEfEst, |
2100 params.dataAmount = 1; // only one byte is update |
2011 UICC_APPL_UPDATE_TRANSPARENT, |
2101 params.fileId = KElemEst; |
2012 0, |
2102 params.fileIdSfi = 0x05; |
2013 0, |
2103 params.serviceType = UICC_APPL_UPDATE_TRANSPARENT; |
2014 KElemEst, |
2104 // File id path |
2015 5, |
2105 params.filePath.Append( KMasterFileId >> 8 ); |
2016 fileData ); |
2106 params.filePath.Append( KMasterFileId ); |
|
2107 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
2108 params.fileData.Append( newState ); |
|
2109 |
|
2110 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
2111 } |
2017 } |
2112 else |
2018 else |
2113 { |
2019 { |
2114 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust"); |
2020 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust"); |
2115 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust" ); |
2021 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust" ); |
2167 TInt ret( KErrNone ); |
2073 TInt ret( KErrNone ); |
2168 |
2074 |
2169 if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() && |
2075 if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() && |
2170 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
2076 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
2171 { |
2077 { |
2172 // Set parameters for UICC_APPL_CMD_REQ message |
2078 ret = UiccApplCmdReq( |
2173 TUiccReadTransparent params; |
2079 ETrIdAclReadEfAcl, |
2174 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
2080 UICC_APPL_READ_TRANSPARENT, |
2175 params.trId = ETrIdAclReadEfAcl; |
2081 0, |
2176 params.dataAmount = 0; |
2082 0, |
2177 params.dataOffset = 0; |
2083 KElemFileAcl, |
2178 params.fileId = KElemFileAcl; |
2084 UICC_SFI_NOT_PRESENT ); |
2179 params.fileIdSfi = UICC_SFI_NOT_PRESENT; |
|
2180 params.serviceType = UICC_APPL_READ_TRANSPARENT; |
|
2181 |
|
2182 // File id path |
|
2183 params.filePath.Append( KMasterFileId >> 8 ); |
|
2184 params.filePath.Append( KMasterFileId ); |
|
2185 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
2186 |
|
2187 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
2188 } |
2085 } |
2189 else |
2086 else |
2190 { |
2087 { |
2191 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust"); |
2088 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust"); |
2192 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADACLREQ, "CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust" ); |
2089 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADACLREQ, "CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust" ); |
2279 ) const |
2177 ) const |
2280 { |
2178 { |
2281 TFLOGSTRING2("TSY: CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries); |
2179 TFLOGSTRING2("TSY: CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries); |
2282 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_DECODEACL, "CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries ); |
2180 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_DECODEACL, "CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries ); |
2283 |
2181 |
2284 // allocate new array, 1 is granularity |
|
2285 CDesC8ArrayFlat* apnList = new( ELeave ) CDesC8ArrayFlat( 1 ); |
2182 CDesC8ArrayFlat* apnList = new( ELeave ) CDesC8ArrayFlat( 1 ); |
2286 CleanupStack::PushL( apnList ); |
2183 CleanupStack::PushL( apnList ); |
2287 |
2184 |
2288 TInt offset( 0 ); |
2185 TInt offset( 0 ); |
2289 |
2186 |
2290 //check length before using |
|
2291 if ( 0 < aTlv.Length() ) |
2187 if ( 0 < aTlv.Length() ) |
2292 { |
2188 { |
2293 // decode TLV entries to CDesC8ArrayFlat |
2189 // decode TLV entries to CDesC8ArrayFlat |
2294 for ( TInt i = 0; i < aTotalEntries; i++ ) |
2190 for ( TInt i = 0; i < aTotalEntries; i++ ) |
2295 { |
2191 { |
2321 { |
2217 { |
2322 TInt indexCount( iAPNList->MdcaCount() ); |
2218 TInt indexCount( iAPNList->MdcaCount() ); |
2323 TFLOGSTRING2("TSY: CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d",indexCount); |
2219 TFLOGSTRING2("TSY: CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d",indexCount); |
2324 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_COMPLETEENUMERATEAPNENTRIES, "CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d", indexCount ); |
2220 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_COMPLETEENUMERATEAPNENTRIES, "CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d", indexCount ); |
2325 |
2221 |
2326 //package index of TLV's to the client |
|
2327 CMmDataPackage dataPackage; |
2222 CMmDataPackage dataPackage; |
2328 dataPackage.PackData( &indexCount ); |
2223 dataPackage.PackData( &indexCount ); |
2329 |
2224 |
2330 // set flag and complete |
2225 iACLIsProgress = EFalse; |
2331 iACLIsProgress = EFalse; //set ACL flag |
|
2332 iMessageRouter->Complete( |
2226 iMessageRouter->Complete( |
2333 EMobilePhoneEnumerateAPNEntries, |
2227 EMobilePhoneEnumerateAPNEntries, |
2334 &dataPackage, |
2228 &dataPackage, |
2335 KErrNone ); |
2229 KErrNone ); |
2336 } |
2230 } |
2361 aclEntry.iApn.Copy( iAPNList->MdcaPoint( aIndex ) ); |
2254 aclEntry.iApn.Copy( iAPNList->MdcaPoint( aIndex ) ); |
2362 } |
2255 } |
2363 |
2256 |
2364 dataPackage.PackData( &aclEntry ); |
2257 dataPackage.PackData( &aclEntry ); |
2365 |
2258 |
2366 // set flag and complete |
2259 iACLIsProgress = EFalse; |
2367 iACLIsProgress = EFalse; //set ACL flag |
|
2368 iMessageRouter->Complete( EMobilePhoneGetAPNname, &dataPackage, err ); |
2260 iMessageRouter->Complete( EMobilePhoneGetAPNname, &dataPackage, err ); |
2369 } |
2261 } |
2370 |
2262 |
2371 // -------------------------------------------------------------------------- |
2263 // -------------------------------------------------------------------------- |
2372 // CMmPhoneMessHandler::UiccDeleteApnEntry |
2264 // CMmPhoneMessHandler::UiccDeleteApnEntry |
2377 { |
2269 { |
2378 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccDeleteApnEntry "); |
2270 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccDeleteApnEntry "); |
2379 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCDELETEAPNENTRY, "CMmPhoneMessHandler::UiccDeleteApnEntry" ); |
2271 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCDELETEAPNENTRY, "CMmPhoneMessHandler::UiccDeleteApnEntry" ); |
2380 |
2272 |
2381 TInt ret; |
2273 TInt ret; |
2382 //check if aIndex is valid or not. |
|
2383 if ( iAPNList->MdcaCount() <= aIndex ) |
2274 if ( iAPNList->MdcaCount() <= aIndex ) |
2384 { |
2275 { |
2385 //error occurs |
|
2386 ret = KErrOverflow; |
2276 ret = KErrOverflow; |
2387 } |
2277 } |
2388 else |
2278 else |
2389 { |
2279 { |
2390 //data is valid |
|
2391 //delete data from cache |
|
2392 iAPNList->Delete( aIndex ); |
2280 iAPNList->Delete( aIndex ); |
2393 iAPNList->Compress(); |
2281 iAPNList->Compress(); |
2394 |
2282 |
2395 //write new list to the SIM |
2283 //write new list to the SIM |
2396 ret = UiccWriteEfAclReq(); |
2284 ret = UiccWriteEfAclReq(); |
2414 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
2302 iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) ) |
2415 { |
2303 { |
2416 TInt dataLen( ACLLength( iAPNList ) ); |
2304 TInt dataLen( ACLLength( iAPNList ) ); |
2417 TUint8 apnCount( iAPNList->MdcaCount() ); |
2305 TUint8 apnCount( iAPNList->MdcaCount() ); |
2418 |
2306 |
2419 TUiccWriteTransparent params; |
2307 TBuf8<KFileDataLength> fileData; |
2420 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
2308 fileData.Append( apnCount ); |
2421 params.trId = ETrIdAclWriteEfAcl; |
|
2422 params.dataOffset = 0; |
|
2423 params.dataAmount = dataLen; |
|
2424 params.fileId = KElemFileAcl; |
|
2425 params.fileIdSfi = UICC_SFI_NOT_PRESENT; |
|
2426 params.serviceType = UICC_APPL_UPDATE_TRANSPARENT; |
|
2427 // File id path |
|
2428 params.filePath.Append( KMasterFileId >> 8 ); |
|
2429 params.filePath.Append( KMasterFileId ); |
|
2430 params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
2431 |
|
2432 params.fileData.Append( apnCount ); |
|
2433 for ( TInt i = 0; i < apnCount; i++ ) |
2309 for ( TInt i = 0; i < apnCount; i++ ) |
2434 { |
2310 { |
2435 TPtrC8 apn = iAPNList->MdcaPoint( i ); |
2311 TPtrC8 apn = iAPNList->MdcaPoint( i ); |
2436 // spec: The tag value of the APN-TLV shall be 'DD' |
2312 // spec: The tag value of the APN-TLV shall be 'DD' |
2437 params.fileData.Append( 0xdd ); |
2313 fileData.Append( 0xdd ); |
2438 params.fileData.Append( apn.Length() ); |
2314 fileData.Append( apn.Length() ); |
2439 params.fileData.Append( apn ); |
2315 fileData.Append( apn ); |
2440 } |
2316 } |
2441 |
2317 |
2442 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
2318 ret = UiccApplCmdReq( |
|
2319 ETrIdAclWriteEfAcl, |
|
2320 UICC_APPL_UPDATE_TRANSPARENT, |
|
2321 0, |
|
2322 0, |
|
2323 KElemFileAcl, |
|
2324 UICC_SFI_NOT_PRESENT, |
|
2325 fileData ); |
2443 } |
2326 } |
2444 else |
2327 else |
2445 { |
2328 { |
2446 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust"); |
2329 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust"); |
2447 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCWRITEEFACLREQ, "CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust" ); |
2330 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCWRITEEFACLREQ, "CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust" ); |
2486 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount()); |
2369 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount()); |
2487 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount() ); |
2370 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount() ); |
2488 |
2371 |
2489 TUint16 length( 0 ); |
2372 TUint16 length( 0 ); |
2490 |
2373 |
2491 for ( TInt i = 0; i < aApnList->MdcaCount(); i++ ) |
2374 if ( aApnList ) |
2492 { |
2375 { |
2493 TPtrC8 apn = aApnList->MdcaPoint( i ); |
2376 for ( TInt i = 0; i < aApnList->MdcaCount(); i++ ) |
2494 length += apn.Length() + 2; |
2377 { |
|
2378 TPtrC8 apn = aApnList->MdcaPoint( i ); |
|
2379 length += apn.Length() + 2; |
|
2380 } |
2495 } |
2381 } |
2496 |
2382 |
2497 // result is incremented by one because of EFacl contains number of tlv objects |
2383 // result is incremented by one because of EFacl contains number of tlv objects |
2498 // as first byte of the file data |
2384 // as first byte of the file data |
2499 length++; |
2385 length++; |
2502 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. ACL len: %d", length ); |
2388 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. ACL len: %d", length ); |
2503 |
2389 |
2504 return length; |
2390 return length; |
2505 } |
2391 } |
2506 |
2392 |
|
2393 |
|
2394 // -------------------------------------------------------------------------- |
|
2395 // CMmPhoneMessHandler::UiccApplCmdReq |
|
2396 // |
|
2397 // -------------------------------------------------------------------------- |
|
2398 // |
|
2399 TInt CMmPhoneMessHandler::UiccApplCmdReq( |
|
2400 const TUiccTrId aTrId, |
|
2401 const TUint8 aServiceType, |
|
2402 const TUint16 aDataAmount, |
|
2403 const TUint16 aDataOffset, |
|
2404 const TUint16 aFileId, |
|
2405 const TUint8 aFileIdSfi, |
|
2406 const TDesC8& aFileData ) |
|
2407 { |
|
2408 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccApplCmdReq"); |
|
2409 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCAPPLCMDREQ, "CMmPhoneMessHandler::UiccApplCmdReq" ); |
|
2410 |
|
2411 TInt ret( KErrNone ); |
|
2412 TBuf8<KFilePathLength> filePath; |
|
2413 filePath.Append( KMasterFileId >> 8 ); |
|
2414 filePath.Append( KMasterFileId ); |
|
2415 if ( KElemFileDynFlagsOrange == aFileId ) |
|
2416 { |
|
2417 filePath.Append( KOrangeDedicatedFile >> 8 ); |
|
2418 filePath.Append( KOrangeDedicatedFile ); |
|
2419 } |
|
2420 else |
|
2421 { |
|
2422 filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); |
|
2423 } |
|
2424 |
|
2425 if ( UICC_APPL_READ_TRANSPARENT == aServiceType ) |
|
2426 { |
|
2427 TUiccReadTransparent params; |
|
2428 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
|
2429 params.trId = aTrId; |
|
2430 params.dataAmount = aDataAmount; |
|
2431 params.dataOffset = aDataOffset; |
|
2432 params.fileId = aFileId; |
|
2433 params.fileIdSfi = aFileIdSfi; |
|
2434 params.serviceType = aServiceType; |
|
2435 params.filePath.Append( filePath ); |
|
2436 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
2437 } |
|
2438 else if ( UICC_APPL_UPDATE_TRANSPARENT == aServiceType ) |
|
2439 { |
|
2440 TUiccWriteTransparent params; |
|
2441 params.messHandlerPtr = static_cast<MUiccOperationBase*>( this ); |
|
2442 params.trId = aTrId; |
|
2443 params.dataAmount = aDataAmount; |
|
2444 params.dataOffset = aDataOffset; |
|
2445 params.fileId = aFileId; |
|
2446 params.fileIdSfi = aFileIdSfi; |
|
2447 params.serviceType = aServiceType; |
|
2448 params.fileData.Append( aFileData ); |
|
2449 params.filePath.Append( filePath ); |
|
2450 ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); |
|
2451 } |
|
2452 // No else |
|
2453 return ret; |
|
2454 } |
|
2455 |
2507 // End of file |
2456 // End of file |