23 #include "satmessaging.h" // sat messaging class |
23 #include "satmessaging.h" // sat messaging class |
24 #include "satmesshandler.h" // sat message handler class |
24 #include "satmesshandler.h" // sat message handler class |
25 #include "ber_tlv.h" // sat ber-tlv classes |
25 #include "ber_tlv.h" // sat ber-tlv classes |
26 #include "satutil.h" // sat utility class |
26 #include "satutil.h" // sat utility class |
27 |
27 |
|
28 #include <satcs.h> |
28 #include <pn_const.h> // server id constants |
29 #include <pn_const.h> // server id constants |
29 #include <tisi.h> // isi message |
30 #include <tisi.h> // isi message |
30 #include <ss_wmisi.h> // Modem SS server |
31 #include <ss_wmisi.h> // Modem SS server |
31 #include <call_modemisi.h> // Modem Call server |
32 #include <call_modemisi.h> // Modem Call server |
32 #include <gpdsisi.h> // GPDS server |
33 #include <gpdsisi.h> // GPDS server |
33 #include <uiccisi.h> // UICC server |
34 #include <uiccisi.h> // UICC server |
34 #include "osttracedefinitions.h" |
35 #include "OstTraceDefinitions.h" |
35 #ifdef OST_TRACE_COMPILER_IN_USE |
36 #ifdef OST_TRACE_COMPILER_IN_USE |
36 #include "satcctraces.h" |
37 #include "satccTraces.h" |
37 #endif |
38 #endif |
38 |
39 |
39 |
40 |
40 |
41 |
41 // CONSTANTS |
42 // CONSTANTS |
414 // SIM does not support USSD and converting it to SS was |
416 // SIM does not support USSD and converting it to SS was |
415 // impossible. Remove the created CcStruct from the CC array and |
417 // impossible. Remove the created CcStruct from the CC array and |
416 // send CC event response. |
418 // send CC event response. |
417 TPtrC8 atkData; |
419 TPtrC8 atkData; |
418 SendSsResourceControlReq( aCcstruct, KError, atkData ); |
420 SendSsResourceControlReq( aCcstruct, KError, atkData ); |
419 |
421 |
420 TInt index( GetArrayIndexById( aCcstruct.iTransId ) ); |
422 TInt index( GetArrayIndexById( aCcstruct.iTransId ) ); |
421 if ( index != KErrNotFound ) |
423 if ( index != KErrNotFound ) |
422 { |
424 { |
423 iCallControlArray->Remove( index ); |
425 iCallControlArray->Remove( index ); |
424 iCallControlArray->Compress(); |
426 iCallControlArray->Compress(); |
456 TInt retValue( aIsiMessage.FindSubBlockOffsetById( |
458 TInt retValue( aIsiMessage.FindSubBlockOffsetById( |
457 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
459 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
458 CALL_MODEM_SB_DESTINATION_ADDRESS, |
460 CALL_MODEM_SB_DESTINATION_ADDRESS, |
459 EIsiSubBlockTypeId8Len8, |
461 EIsiSubBlockTypeId8Len8, |
460 sbStartOffset ) ); |
462 sbStartOffset ) ); |
461 |
463 |
462 if ( KErrNone == retValue ) |
464 if ( KErrNone == retValue ) |
463 { |
465 { |
464 envelope.AddTag( KTlvAddressTag ); |
466 envelope.AddTag( KTlvAddressTag ); |
465 envelope.AddByte( KMSBMask | aCallControl.iAddressType ); |
467 envelope.AddByte( KMSBMask | aCallControl.iAddressType ); |
466 // Unicode address must be converted to BCD number |
468 // Unicode address must be converted to BCD number |
481 sbStartOffset ); |
483 sbStartOffset ); |
482 if ( KErrNone == retValue ) |
484 if ( KErrNone == retValue ) |
483 { |
485 { |
484 envelope.AddTag( KTlvSubaddressTag ); |
486 envelope.AddTag( KTlvSubaddressTag ); |
485 // Subaddress is given in same form as expected in envelope |
487 // Subaddress is given in same form as expected in envelope |
486 addressLength = aIsiMessage.Get8bit( sbStartOffset + |
488 addressLength = aIsiMessage.Get8bit( sbStartOffset + |
487 CALL_MODEM_SB_DESTINATION_SUBADDRESS_OFFSET_ADDRLEN ); |
489 CALL_MODEM_SB_DESTINATION_SUBADDRESS_OFFSET_ADDRLEN ); |
488 envelope.AddData( aIsiMessage.GetData( sbStartOffset + |
490 envelope.AddData( aIsiMessage.GetData( sbStartOffset + |
489 CALL_MODEM_SB_DESTINATION_SUBADDRESS_OFFSET_ADDR, |
491 CALL_MODEM_SB_DESTINATION_SUBADDRESS_OFFSET_ADDR, |
490 addressLength ) ); |
492 addressLength ) ); |
491 } |
493 } |
492 // Add mandatory location information |
494 // Add mandatory location information |
493 AddLocationInformationToTlv( envelope ); |
495 AddLocationInformationToTlv( envelope ); |
494 // send it away.. |
496 // send it away.. |
714 } |
715 } |
715 case CALL_MODEM_RESOURCE_CONF_IND: |
716 case CALL_MODEM_RESOURCE_CONF_IND: |
716 { |
717 { |
717 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_IND"); |
718 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_IND"); |
718 OstTrace0( TRACE_NORMAL, DUP1_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_IND" ); |
719 OstTrace0( TRACE_NORMAL, DUP1_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_IND" ); |
719 |
720 |
720 if ( CALL_MODEM_RES_CONF_STARTUP == |
721 if ( CALL_MODEM_RES_CONF_STARTUP == |
721 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
722 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
722 CALL_MODEM_RESOURCE_CONF_IND_OFFSET_CONFSTATUS ) ) |
723 CALL_MODEM_RESOURCE_CONF_IND_OFFSET_CONFSTATUS ) ) |
723 { |
724 { |
724 // configure resource control if CC enabled in (U)SIM |
725 // configure resource control if CC enabled in (U)SIM |
725 // MT call is always controlled by NTSY |
726 // MT call is always controlled by NTSY |
726 if ( iCallControlEnabled ) |
727 if ( iCallControlEnabled ) |
742 } |
743 } |
743 case CALL_MODEM_RESOURCE_CONF_RESP: |
744 case CALL_MODEM_RESOURCE_CONF_RESP: |
744 { |
745 { |
745 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP"); |
746 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP"); |
746 OstTrace0( TRACE_NORMAL, DUP2_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP" ); |
747 OstTrace0( TRACE_NORMAL, DUP2_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP" ); |
747 |
748 |
748 if ( CALL_MODEM_RES_CONF_SET == |
749 if ( CALL_MODEM_RES_CONF_SET == |
749 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
750 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
750 CALL_MODEM_RESOURCE_CONF_RESP_OFFSET_CONFOPERATION ) ) |
751 CALL_MODEM_RESOURCE_CONF_RESP_OFFSET_CONFOPERATION ) ) |
751 { |
752 { |
752 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP Resource configured"); |
753 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP Resource configured"); |
753 OstTrace0( TRACE_NORMAL, DUP3_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP Resource configured" ); |
754 OstTrace0( TRACE_NORMAL, DUP3_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_CONF_RESP Resource configured" ); |
754 |
755 |
755 } |
756 } |
756 break; |
757 break; |
757 } |
758 } |
758 case CALL_MODEM_RESOURCE_RESP: |
759 case CALL_MODEM_RESOURCE_RESP: |
759 { |
760 { |
760 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_RESP Resource control sequence done"); |
761 TFLOGSTRING("TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_RESP Resource control sequence done"); |
761 OstTrace0( TRACE_NORMAL, DUP4_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_RESP Resource control sequence done" ); |
762 OstTrace0( TRACE_NORMAL, DUP4_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, CALL_MODEM_RESOURCE_RESP Resource control sequence done" ); |
762 |
763 |
763 break; |
764 break; |
764 } |
765 } |
765 default: |
766 default: |
766 { |
767 { |
767 // none |
768 // none |
781 } |
782 } |
782 case SS_RESOURCE_CONF_IND: |
783 case SS_RESOURCE_CONF_IND: |
783 { |
784 { |
784 TFLOGSTRING("TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_IND"); |
785 TFLOGSTRING("TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_IND"); |
785 OstTrace0( TRACE_NORMAL, DUP5_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_IND" ); |
786 OstTrace0( TRACE_NORMAL, DUP5_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_IND" ); |
786 |
787 |
787 if ( SS_RESOURCE_CONF_READY == |
788 if ( SS_RESOURCE_CONF_READY == |
788 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
789 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
789 SS_RESOURCE_CONF_IND_OFFSET_CONFSTATUS ) ) |
790 SS_RESOURCE_CONF_IND_OFFSET_CONFSTATUS ) ) |
790 { |
791 { |
791 // configure resource control if CC enabled in (U)SIM |
792 // configure resource control if CC enabled in (U)SIM |
792 if ( iCallControlEnabled ) |
793 if ( iCallControlEnabled ) |
793 { |
794 { |
796 } |
797 } |
797 break; |
798 break; |
798 } |
799 } |
799 case SS_RESOURCE_CONF_RESP: |
800 case SS_RESOURCE_CONF_RESP: |
800 { |
801 { |
801 if ( SS_RESOURCE_CONF_SET == |
802 if ( SS_RESOURCE_CONF_SET == |
802 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
803 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
803 SS_RESOURCE_CONF_RESP_OFFSET_CONFOPERATION ) ) |
804 SS_RESOURCE_CONF_RESP_OFFSET_CONFOPERATION ) ) |
804 { |
805 { |
805 TFLOGSTRING("TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_RESP Resource configured"); |
806 TFLOGSTRING("TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_RESP Resource configured"); |
806 OstTrace0( TRACE_NORMAL, DUP6_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_RESP Resource configured" ); |
807 OstTrace0( TRACE_NORMAL, DUP6_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, SS_RESOURCE_CONF_RESP Resource configured" ); |
807 |
808 |
808 } |
809 } |
809 break; |
810 break; |
810 } |
811 } |
811 case SS_STATUS_IND: |
812 case SS_STATUS_IND: |
812 { |
813 { |
813 TUint8 status( aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
814 TUint8 status( aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
814 SS_STATUS_IND_OFFSET_SSSTATUSINDICATION ) ); |
815 SS_STATUS_IND_OFFSET_SSSTATUSINDICATION ) ); |
815 |
816 |
816 if ( SS_STATUS_REQUEST_SERVICE_FAILED == status |
817 if ( SS_STATUS_REQUEST_SERVICE_FAILED == status |
817 || SS_GSM_STATUS_REQUEST_USSD_FAILED ) |
818 || SS_GSM_STATUS_REQUEST_USSD_FAILED ) |
818 { |
819 { |
864 } |
865 } |
865 break; |
866 break; |
866 } |
867 } |
867 case GPDS_RESOURCE_CONF_RESP: |
868 case GPDS_RESOURCE_CONF_RESP: |
868 { |
869 { |
869 if ( GPDS_RESOURCE_CONF_SET == |
870 if ( GPDS_RESOURCE_CONF_SET == |
870 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
871 aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
871 GPDS_RESOURCE_CONF_RESP_OFFSET_CONFOPERATION ) ) |
872 GPDS_RESOURCE_CONF_RESP_OFFSET_CONFOPERATION ) ) |
872 { |
873 { |
873 TFLOGSTRING("TSY: CSatCC::MessageReceived, GPDS_RESOURCE_CONF_RESP Resource configured"); |
874 TFLOGSTRING("TSY: CSatCC::MessageReceived, GPDS_RESOURCE_CONF_RESP Resource configured"); |
874 OstTrace0( TRACE_NORMAL, DUP9_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, GPDS_RESOURCE_CONF_RESP Resource configured" ); |
875 OstTrace0( TRACE_NORMAL, DUP9_CSATCC_MESSAGERECEIVED, "TSY: CSatCC::MessageReceived, GPDS_RESOURCE_CONF_RESP Resource configured" ); |
875 |
876 |
1026 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1027 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1027 CALL_MODEM_SB_RESOURCE, |
1028 CALL_MODEM_SB_RESOURCE, |
1028 EIsiSubBlockTypeId8Len8, |
1029 EIsiSubBlockTypeId8Len8, |
1029 sbStartOffset ) ); |
1030 sbStartOffset ) ); |
1030 |
1031 |
1031 if ( KErrNone == retValue |
1032 if ( KErrNone == retValue |
1032 && CALL_MODEM_RES_ID_MO_INIT & aIsiMessage.Get16bit( sbStartOffset + |
1033 && CALL_MODEM_RES_ID_MO_INIT & aIsiMessage.Get16bit( sbStartOffset + |
1033 CALL_MODEM_SB_RESOURCE_OFFSET_RES ) ) |
1034 CALL_MODEM_SB_RESOURCE_OFFSET_RES ) ) |
1034 { |
1035 { |
1035 TCallControl callcontrol; |
1036 TCallControl callcontrol; |
1036 // store traid's |
1037 // store traid's |
1037 callcontrol.iTransId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1038 callcontrol.iTransId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1038 CALL_MODEM_RESOURCE_IND_OFFSET_TRID ); |
1039 CALL_MODEM_RESOURCE_IND_OFFSET_TRID ); |
1039 callcontrol.iRecourceId = aIsiMessage.Get8bit( |
1040 callcontrol.iRecourceId = aIsiMessage.Get8bit( |
1040 ISI_HEADER_OFFSET_RESOURCEID); |
1041 ISI_HEADER_OFFSET_RESOURCEID); |
1041 callcontrol.iCallId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1042 callcontrol.iCallId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1042 CALL_MODEM_RESOURCE_IND_OFFSET_CALLID ); |
1043 CALL_MODEM_RESOURCE_IND_OFFSET_CALLID ); |
1043 |
1044 |
1044 retValue = aIsiMessage.FindSubBlockOffsetById( |
1045 retValue = aIsiMessage.FindSubBlockOffsetById( |
1045 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1046 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1046 CALL_MODEM_SB_RESOURCE_SEQ_ID, |
1047 CALL_MODEM_SB_RESOURCE_SEQ_ID, |
1047 EIsiSubBlockTypeId8Len8, |
1048 EIsiSubBlockTypeId8Len8, |
1048 sbStartOffset ); |
1049 sbStartOffset ); |
1049 if( KErrNone == retValue ) |
1050 if( KErrNone == retValue ) |
1050 { |
1051 { |
1051 callcontrol.iResourceSeqId = aIsiMessage.Get8bit( sbStartOffset + |
1052 callcontrol.iResourceSeqId = aIsiMessage.Get8bit( sbStartOffset + |
1052 CALL_MODEM_SB_RESOURCE_SEQ_ID_OFFSET_SEQUENCEID ); |
1053 CALL_MODEM_SB_RESOURCE_SEQ_ID_OFFSET_SEQUENCEID ); |
1053 } |
1054 } |
1054 |
1055 |
1055 retValue = aIsiMessage.FindSubBlockOffsetById( |
1056 retValue = aIsiMessage.FindSubBlockOffsetById( |
1056 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1057 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1057 CALL_MODEM_SB_MODE, |
1058 CALL_MODEM_SB_MODE, |
1058 EIsiSubBlockTypeId8Len8, |
1059 EIsiSubBlockTypeId8Len8, |
1059 sbStartOffset ); |
1060 sbStartOffset ); |
1060 if( KErrNone == retValue ) |
1061 if( KErrNone == retValue ) |
1061 { |
1062 { |
1062 callcontrol.iCallMode.Append( aIsiMessage.Get8bit( sbStartOffset + |
1063 callcontrol.iCallMode.Append( aIsiMessage.Get8bit( sbStartOffset + |
1063 CALL_MODEM_SB_MODE_OFFSET_MODE ) ); |
1064 CALL_MODEM_SB_MODE_OFFSET_MODE ) ); |
1064 callcontrol.iCallMode.Append( aIsiMessage.Get8bit( sbStartOffset + |
1065 callcontrol.iCallMode.Append( aIsiMessage.Get8bit( sbStartOffset + |
1065 CALL_MODEM_SB_MODE_OFFSET_MODEINFO ) ); |
1066 CALL_MODEM_SB_MODE_OFFSET_MODEINFO ) ); |
1066 } |
1067 } |
1067 |
1068 |
1068 retValue = aIsiMessage.FindSubBlockOffsetById( |
1069 retValue = aIsiMessage.FindSubBlockOffsetById( |
1069 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1070 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
1090 { |
1091 { |
1091 callcontrol.iAddressType = aIsiMessage.Get8bit( sbStartOffset + |
1092 callcontrol.iAddressType = aIsiMessage.Get8bit( sbStartOffset + |
1092 CALL_MODEM_SB_DESTINATION_ADDRESS_OFFSET_ADDRTYPE ); |
1093 CALL_MODEM_SB_DESTINATION_ADDRESS_OFFSET_ADDRTYPE ); |
1093 TUint8 addressLength( aIsiMessage.Get8bit( sbStartOffset + |
1094 TUint8 addressLength( aIsiMessage.Get8bit( sbStartOffset + |
1094 CALL_MODEM_SB_DESTINATION_ADDRESS_OFFSET_ADDRLEN ) ); |
1095 CALL_MODEM_SB_DESTINATION_ADDRESS_OFFSET_ADDRLEN ) ); |
1095 callcontrol.iString.Copy( aIsiMessage.GetData( sbStartOffset + |
1096 callcontrol.iString.Copy( aIsiMessage.GetData( sbStartOffset + |
1096 CALL_MODEM_SB_DESTINATION_ADDRESS_OFFSET_ADDR, |
1097 CALL_MODEM_SB_DESTINATION_ADDRESS_OFFSET_ADDR, |
1097 addressLength * 2 ) ); |
1098 addressLength * 2 ) ); |
1098 } |
1099 } |
1099 |
1100 |
|
1101 retValue = aIsiMessage.FindSubBlockOffsetById( |
|
1102 ISI_HEADER_SIZE + SIZE_CALL_MODEM_RESOURCE_IND , |
|
1103 CALL_MODEM_SB_CHECK_INFO, |
|
1104 EIsiSubBlockTypeId8Len8, |
|
1105 sbStartOffset ); |
|
1106 if( KErrNone == retValue ) |
|
1107 { |
|
1108 callcontrol.iCheckInfo = aIsiMessage.GetData( sbStartOffset, |
|
1109 SIZE_CALL_MODEM_SB_CHECK_INFO ); |
|
1110 } |
1100 if( CALL_MODEM_MODE_EMERGENCY == callcontrol.iCallMode[0] ) |
1111 if( CALL_MODEM_MODE_EMERGENCY == callcontrol.iCallMode[0] ) |
1101 { |
1112 { |
1102 // Do not make SIM call control, allow emergency calls always |
1113 // Do not make SIM call control, allow emergency calls always |
1103 TPtrC8 atkData; |
1114 TPtrC8 atkData; |
1104 SendCallModemResourceReq( |
1115 SendCallModemResourceReq( |
1149 |
1160 |
1150 // Add mandatory data |
1161 // Add mandatory data |
1151 // Modem Call ID [M]: the unique call ID or CALL_ID_NONE. |
1162 // Modem Call ID [M]: the unique call ID or CALL_ID_NONE. |
1152 isiMessage.Append( aTcc.iCallId ); |
1163 isiMessage.Append( aTcc.iCallId ); |
1153 // CALL_MODEM_SB_RESOURCE [M]: resource. Shall be same as in the corresponding indication. |
1164 // CALL_MODEM_SB_RESOURCE [M]: resource. Shall be same as in the corresponding indication. |
1154 TIsiSubBlock resource( |
1165 TIsiSubBlock resource( |
1155 isiMessage, |
1166 isiMessage, |
1156 CALL_MODEM_SB_RESOURCE, |
1167 CALL_MODEM_SB_RESOURCE, |
1157 EIsiSubBlockTypeId8Len8 ); |
1168 EIsiSubBlockTypeId8Len8 ); |
1158 TSatUtility::AppendWord( CALL_MODEM_RES_ID_MO_INIT, isiMessage ); |
1169 TSatUtility::AppendWord( CALL_MODEM_RES_ID_MO_INIT, isiMessage ); |
1159 resource.CompleteSubBlock(); |
1170 resource.CompleteSubBlock(); |
1160 |
1171 |
1161 // CALL_MODEM_SB_RESOURCE_SEQ_ID [M]: Sequence ID. Shall be same as in the corresponding indication. |
1172 // CALL_MODEM_SB_RESOURCE_SEQ_ID [M]: Sequence ID. Shall be same as in the corresponding indication. |
1162 TIsiSubBlock resourceSeqId( |
1173 TIsiSubBlock resourceSeqId( |
1163 isiMessage, |
1174 isiMessage, |
1164 CALL_MODEM_SB_RESOURCE_SEQ_ID, |
1175 CALL_MODEM_SB_RESOURCE_SEQ_ID, |
1165 EIsiSubBlockTypeId8Len8 ); |
1176 EIsiSubBlockTypeId8Len8 ); |
1166 isiMessage.Append( aTcc.iResourceSeqId ); |
1177 isiMessage.Append( aTcc.iResourceSeqId ); |
1167 isiMessage.Append( KPadding ); |
1178 isiMessage.Append( KPadding ); |
1190 } |
1201 } |
1191 case KCcResultAllowedWithModifications: |
1202 case KCcResultAllowedWithModifications: |
1192 { |
1203 { |
1193 // First check if this has been modified to a new SS/USSD action |
1204 // First check if this has been modified to a new SS/USSD action |
1194 CTlv ssServerString; |
1205 CTlv ssServerString; |
1195 |
1206 |
1196 if ( KErrNone == response.TlvByTagValue( &ssServerString, |
1207 if ( KErrNone == response.TlvByTagValue( &ssServerString, |
1197 KTlvSsStringTag ) || |
1208 KTlvSsStringTag ) || |
1198 KErrNone == response.TlvByTagValue( &ssServerString, |
1209 KErrNone == response.TlvByTagValue( &ssServerString, |
1199 KTlvUssdStringTag ) ) |
1210 KTlvUssdStringTag ) ) |
1200 { |
1211 { |
1201 isiMessage.Append( CALL_MODEM_RESOURCE_DENIED ); |
1212 isiMessage.Append( CALL_MODEM_RESOURCE_DENIED ); |
1219 status.CompleteSubBlock(); |
1230 status.CompleteSubBlock(); |
1220 |
1231 |
1221 if ( KRejected == internalCcResult || KChanged == internalCcResult ) |
1232 if ( KRejected == internalCcResult || KChanged == internalCcResult ) |
1222 { |
1233 { |
1223 // CALL_MODEM_SB_CAUSE sb is needed in rejected cases |
1234 // CALL_MODEM_SB_CAUSE sb is needed in rejected cases |
1224 TIsiSubBlock cause( |
1235 TIsiSubBlock cause( |
1225 isiMessage, |
1236 isiMessage, |
1226 CALL_MODEM_SB_CAUSE, |
1237 CALL_MODEM_SB_CAUSE, |
1227 EIsiSubBlockTypeId8Len8 ); |
1238 EIsiSubBlockTypeId8Len8 ); |
1228 isiMessage.Append( CALL_MODEM_CAUSE_TYPE_CLIENT ); |
1239 isiMessage.Append( CALL_MODEM_CAUSE_TYPE_CLIENT ); |
1229 isiMessage.Append( CALL_MODEM_CAUSE_NOT_ALLOWED ); |
1240 isiMessage.Append( CALL_MODEM_CAUSE_NOT_ALLOWED ); |
1230 cause.CompleteSubBlock(); |
1241 cause.CompleteSubBlock(); |
1231 sbcount++; |
1242 sbcount++; |
1232 } |
1243 } |
1233 |
1244 |
1234 // CALL_MODEM_SB_MODE [M]: call mode. |
1245 // CALL_MODEM_SB_MODE [M]: call mode. |
1235 TIsiSubBlock mode( |
1246 TIsiSubBlock mode( |
1236 isiMessage, |
1247 isiMessage, |
1237 CALL_MODEM_SB_MODE, |
1248 CALL_MODEM_SB_MODE, |
1238 EIsiSubBlockTypeId8Len8 ); |
1249 EIsiSubBlockTypeId8Len8 ); |
1239 // 2 byte buffer |
1250 // 2 byte buffer |
1240 isiMessage.Append( aTcc.iCallMode ); |
1251 isiMessage.Append( aTcc.iCallMode ); |
1241 mode.CompleteSubBlock(); |
1252 mode.CompleteSubBlock(); |
1242 |
1253 |
1243 // CALL_MODEM_SB_BC [M]: Bearer Capabilities for the call. |
1254 // CALL_MODEM_SB_BC [M]: Bearer Capabilities for the call. |
1244 TIsiSubBlock bearer( |
1255 TIsiSubBlock bearer( |
1245 isiMessage, |
1256 isiMessage, |
1246 CALL_MODEM_SB_BC, |
1257 CALL_MODEM_SB_BC, |
1247 EIsiSubBlockTypeId8Len8 ); |
1258 EIsiSubBlockTypeId8Len8 ); |
1248 |
1259 |
1249 // Check if (U)SIM has provided new bearer caps |
1260 // Check if (U)SIM has provided new bearer caps |
1278 { |
1289 { |
1279 // CALL_MODEM_ADDRESS_TYPE, mask MSB off |
1290 // CALL_MODEM_ADDRESS_TYPE, mask MSB off |
1280 isiMessage.Append( addressTlv.GetValue()[ 0 ] ^KMSBMask ); |
1291 isiMessage.Append( addressTlv.GetValue()[ 0 ] ^KMSBMask ); |
1281 isiMessage.Append( KPadding ); |
1292 isiMessage.Append( KPadding ); |
1282 isiMessage.Append( KPadding ); |
1293 isiMessage.Append( KPadding ); |
1283 |
1294 |
1284 // Temp storage for address |
1295 // Temp storage for address |
1285 TBuf8<2 * KCallServerMaxAddressLenght> asciiAddress; |
1296 TBuf8<2 * KCallServerMaxAddressLenght> asciiAddress; |
1286 TSatUtility::BCDToAscii( addressTlv.GetValue().Mid( 1 ), |
1297 TSatUtility::BCDToAscii( addressTlv.GetValue().Mid( 1 ), |
1287 asciiAddress ); |
1298 asciiAddress ); |
1288 |
1299 |
1289 //add the number string as unicode. |
1300 //add the number string as unicode. |
1290 TBuf16<KCallServerMaxAddressLenght> unicodeNumber; |
1301 TBuf16<KCallServerMaxAddressLenght> unicodeNumber; |
1291 TSatUtility::ConvertSms7ToUnicode16( unicodeNumber, asciiAddress ); |
1302 TSatUtility::ConvertSms7ToUnicode16( unicodeNumber, asciiAddress ); |
1292 TBuf8<2 * KCallServerMaxAddressLenght> temp; |
1303 TBuf8<2 * KCallServerMaxAddressLenght> temp; |
1293 TIsiUtility::CopyToBigEndian( unicodeNumber, temp ); |
1304 TIsiUtility::CopyToBigEndian( unicodeNumber, temp ); |
1294 |
1305 |
1295 // Address length = Number of Unicode characters in address |
1306 // Address length = Number of Unicode characters in address |
1296 isiMessage.Append( temp.Length()/2 ); |
1307 isiMessage.Append( temp.Length()/2 ); |
1297 isiMessage.Append( temp ); |
1308 isiMessage.Append( temp ); |
1298 |
1309 |
1299 address.CompleteSubBlock(); |
1310 address.CompleteSubBlock(); |
1300 sbcount++; |
1311 sbcount++; |
1301 } |
1312 } |
1302 |
1313 |
1303 CTlv subAddressTlv; |
1314 CTlv subAddressTlv; |
1304 ret = response.TlvByTagValue( &subAddressTlv, KTlvSubaddressTag ); |
1315 ret = response.TlvByTagValue( &subAddressTlv, KTlvSubaddressTag ); |
1305 if ( KErrNone == ret ) |
1316 if ( KErrNone == ret ) |
1306 { |
1317 { |
1307 TIsiSubBlock subAddress( |
1318 TIsiSubBlock subAddress( |
1308 isiMessage, |
1319 isiMessage, |
1309 CALL_MODEM_SB_DESTINATION_SUBADDRESS, |
1320 CALL_MODEM_SB_DESTINATION_SUBADDRESS, |
1310 EIsiSubBlockTypeId8Len8 ); |
1321 EIsiSubBlockTypeId8Len8 ); |
1311 isiMessage.Append( subAddressTlv.GetLength() ); |
1322 isiMessage.Append( subAddressTlv.GetLength() ); |
1312 isiMessage.Append( subAddressTlv.GetData( ETLV_SubAddress ) ); |
1323 isiMessage.Append( subAddressTlv.GetData( ETLV_SubAddress ) ); |
1325 isiMessage.Append( aTcc.iString ); |
1336 isiMessage.Append( aTcc.iString ); |
1326 address.CompleteSubBlock(); |
1337 address.CompleteSubBlock(); |
1327 sbcount++; |
1338 sbcount++; |
1328 } |
1339 } |
1329 |
1340 |
|
1341 // CALL_MODEM_SB_CHECK_INFO[O]: bitfield saying if some checks |
|
1342 // should be ignored in Call Modem Server |
|
1343 if ( aTcc.iCheckInfo.Length() ) |
|
1344 { |
|
1345 isiMessage.Append( aTcc.iCheckInfo ); |
|
1346 sbcount++; |
|
1347 } |
1330 TBuf8<1> numOfSubblocks; |
1348 TBuf8<1> numOfSubblocks; |
1331 numOfSubblocks.Append( sbcount); |
1349 numOfSubblocks.Append( sbcount); |
1332 isiMessage.Insert( 1, numOfSubblocks ); |
1350 isiMessage.Insert( 1, numOfSubblocks ); |
|
1351 |
|
1352 // before sending the call control result to call server, |
|
1353 // inform NTSY about call control CALL_ID and call control result |
|
1354 CMmDataPackage dataPackage; |
|
1355 TUint8 callId( aTcc.iCallId ); |
|
1356 dataPackage.PackData( &callId, &ccresult ); |
|
1357 iSatMessaging->GetMessageRouter()->ExtFuncL( |
|
1358 ESatNotifyCallControlRequest, &dataPackage ); |
1333 // send request |
1359 // send request |
1334 iSatMessHandler->CallModemResourceReq( aTcc.iTransId, isiMessage ); |
1360 iSatMessHandler->CallModemResourceReq( aTcc.iTransId, isiMessage ); |
1335 |
1361 |
1336 if ( KCcEmptyResponseLenght < aApduData.Length() ) |
1362 if ( KCcEmptyResponseLenght < aApduData.Length() ) |
1337 { |
1363 { |
1354 OstTrace0( TRACE_NORMAL, CSATCC_SSRESOURCECONTROLIND, "CSatCC::SsResourceControlInd" ); |
1380 OstTrace0( TRACE_NORMAL, CSATCC_SSRESOURCECONTROLIND, "CSatCC::SsResourceControlInd" ); |
1355 |
1381 |
1356 TCallControl callcontrol; |
1382 TCallControl callcontrol; |
1357 TInt stringLength; |
1383 TInt stringLength; |
1358 // store traid's |
1384 // store traid's |
1359 callcontrol.iTransId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1385 callcontrol.iTransId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1360 SS_RESOURCE_CONTROL_IND_OFFSET_TRANSID ); |
1386 SS_RESOURCE_CONTROL_IND_OFFSET_TRANSID ); |
1361 callcontrol.iRecourceId = aIsiMessage.Get8bit( |
1387 callcontrol.iRecourceId = aIsiMessage.Get8bit( |
1362 ISI_HEADER_OFFSET_RESOURCEID); |
1388 ISI_HEADER_OFFSET_RESOURCEID); |
1363 |
1389 |
1364 TUint sbStartOffset( 0 ); |
1390 TUint sbStartOffset( 0 ); |
1365 TInt retValue( aIsiMessage.FindSubBlockOffsetById( |
1391 TInt retValue( aIsiMessage.FindSubBlockOffsetById( |
1366 ISI_HEADER_SIZE + SIZE_SS_RESOURCE_CONTROL_IND, |
1392 ISI_HEADER_SIZE + SIZE_SS_RESOURCE_CONTROL_IND, |
1367 SS_SB_RESOURCE_SEQ_ID, |
1393 SS_SB_RESOURCE_SEQ_ID, |
1368 EIsiSubBlockTypeId8Len8, |
1394 EIsiSubBlockTypeId8Len8, |
1369 sbStartOffset ) ); |
1395 sbStartOffset ) ); |
1370 |
1396 |
1371 if( KErrNone == retValue ) |
1397 if( KErrNone == retValue ) |
1372 { |
1398 { |
1373 callcontrol.iResourceSeqId = aIsiMessage.Get8bit( sbStartOffset + |
1399 callcontrol.iResourceSeqId = aIsiMessage.Get8bit( sbStartOffset + |
1374 SS_SB_RESOURCE_SEQ_ID_OFFSET_SEQUENCEID ); |
1400 SS_SB_RESOURCE_SEQ_ID_OFFSET_SEQUENCEID ); |
1375 } |
1401 } |
1376 |
1402 |
1377 retValue = aIsiMessage.FindSubBlockOffsetById( |
1403 retValue = aIsiMessage.FindSubBlockOffsetById( |
1378 ISI_HEADER_SIZE + SIZE_SS_RESOURCE_CONTROL_IND, |
1404 ISI_HEADER_SIZE + SIZE_SS_RESOURCE_CONTROL_IND, |
1379 SS_SB_SS_CONTROL, |
1405 SS_SB_SS_CONTROL, |
1380 EIsiSubBlockTypeId8Len8, |
1406 EIsiSubBlockTypeId8Len8, |
1381 sbStartOffset ); |
1407 sbStartOffset ); |
1382 |
1408 |
1383 if( KErrNone == retValue ) |
1409 if( KErrNone == retValue ) |
1384 { |
1410 { |
1385 stringLength = aIsiMessage.Get8bit( sbStartOffset + |
1411 stringLength = aIsiMessage.Get8bit( sbStartOffset + |
1386 SS_SB_SS_CONTROL_OFFSET_SSSTRINGLENGTH ); |
1412 SS_SB_SS_CONTROL_OFFSET_SSSTRINGLENGTH ); |
1387 callcontrol.iString.Copy( aIsiMessage.GetData( |
1413 callcontrol.iString.Copy( aIsiMessage.GetData( |
1388 sbStartOffset + SS_SB_SS_CONTROL_OFFSET_SSSTRING, |
1414 sbStartOffset + SS_SB_SS_CONTROL_OFFSET_SSSTRING, |
1389 stringLength) ); |
1415 stringLength) ); |
1390 } |
1416 } |
1391 |
1417 |
1392 retValue = aIsiMessage.FindSubBlockOffsetById( |
1418 retValue = aIsiMessage.FindSubBlockOffsetById( |
1393 ISI_HEADER_SIZE + SIZE_SS_RESOURCE_CONTROL_IND, |
1419 ISI_HEADER_SIZE + SIZE_SS_RESOURCE_CONTROL_IND, |
1394 SS_SB_USSD_CONTROL, |
1420 SS_SB_USSD_CONTROL, |
1395 EIsiSubBlockTypeId8Len8, |
1421 EIsiSubBlockTypeId8Len8, |
1396 sbStartOffset ); |
1422 sbStartOffset ); |
1397 |
1423 |
1398 if( KErrNone == retValue ) |
1424 if( KErrNone == retValue ) |
1399 { |
1425 { |
1400 callcontrol.iUssdCodingInfo = aIsiMessage.Get8bit( sbStartOffset + |
1426 callcontrol.iUssdCodingInfo = aIsiMessage.Get8bit( sbStartOffset + |
1401 SS_SB_USSD_CONTROL_OFFSET_CODINGINFO ); |
1427 SS_SB_USSD_CONTROL_OFFSET_CODINGINFO ); |
1402 stringLength = aIsiMessage.Get8bit( sbStartOffset + |
1428 stringLength = aIsiMessage.Get8bit( sbStartOffset + |
1403 SS_SB_USSD_CONTROL_OFFSET_USSDSTRINGLENGTH ); |
1429 SS_SB_USSD_CONTROL_OFFSET_USSDSTRINGLENGTH ); |
1404 |
1430 |
1405 callcontrol.iUssdString.Copy( aIsiMessage.GetData( |
1431 callcontrol.iUssdString.Copy( aIsiMessage.GetData( |
1406 sbStartOffset + SS_SB_USSD_CONTROL_OFFSET_USSDSTRING, |
1432 sbStartOffset + SS_SB_USSD_CONTROL_OFFSET_USSDSTRING, |
1407 stringLength ) ); |
1433 stringLength ) ); |
1408 } |
1434 } |
1409 // store struct |
1435 // store struct |
1410 iCallControlArray->Append( callcontrol ); |
1436 iCallControlArray->Append( callcontrol ); |
1422 // ----------------------------------------------------------------------------- |
1448 // ----------------------------------------------------------------------------- |
1423 // CSatCC::SendSsResourceControlReq |
1449 // CSatCC::SendSsResourceControlReq |
1424 // Creates resource control response for modem SS server |
1450 // Creates resource control response for modem SS server |
1425 // ----------------------------------------------------------------------------- |
1451 // ----------------------------------------------------------------------------- |
1426 // |
1452 // |
1427 void CSatCC::SendSsResourceControlReq( |
1453 void CSatCC::SendSsResourceControlReq( |
1428 const TCallControl& aTcc, |
1454 const TCallControl& aTcc, |
1429 const TUint8 aResult, |
1455 const TUint8 aResult, |
1430 TPtrC8 aApduData ) |
1456 TPtrC8 aApduData ) |
1431 { |
1457 { |
1432 TFLOGSTRING("TSY: CSatCC::SendSsResourceControlReq"); |
1458 TFLOGSTRING("TSY: CSatCC::SendSsResourceControlReq"); |
1453 // SS_RESOURCE_CONTROL_REQ has 3 mandatory sb's |
1479 // SS_RESOURCE_CONTROL_REQ has 3 mandatory sb's |
1454 TUint8 sbcount( 3 ); |
1480 TUint8 sbcount( 3 ); |
1455 // Add mandatory data |
1481 // Add mandatory data |
1456 isiMessage.Append( KPadding ); |
1482 isiMessage.Append( KPadding ); |
1457 // SS_SB_RESOURCE [M]: resource. Shall be same as in the corresponding indication. |
1483 // SS_SB_RESOURCE [M]: resource. Shall be same as in the corresponding indication. |
1458 TIsiSubBlock resource( |
1484 TIsiSubBlock resource( |
1459 isiMessage, |
1485 isiMessage, |
1460 SS_SB_RESOURCE , |
1486 SS_SB_RESOURCE , |
1461 EIsiSubBlockTypeId8Len8 ); |
1487 EIsiSubBlockTypeId8Len8 ); |
1462 TSatUtility::AppendWord( SS_RES_ID_MO_SS_OPERATION, isiMessage ); |
1488 TSatUtility::AppendWord( SS_RES_ID_MO_SS_OPERATION, isiMessage ); |
1463 resource.CompleteSubBlock(); |
1489 resource.CompleteSubBlock(); |
1464 |
1490 |
1465 // SS_SB_RESOURCE_SEQ_ID [M]: [M]: Sequence ID. Shall be same as in the corresponding indication. |
1491 // SS_SB_RESOURCE_SEQ_ID [M]: [M]: Sequence ID. Shall be same as in the corresponding indication. |
1466 TIsiSubBlock resourceSeqId( |
1492 TIsiSubBlock resourceSeqId( |
1467 isiMessage, |
1493 isiMessage, |
1468 SS_SB_RESOURCE_SEQ_ID, |
1494 SS_SB_RESOURCE_SEQ_ID, |
1469 EIsiSubBlockTypeId8Len8 ); |
1495 EIsiSubBlockTypeId8Len8 ); |
1470 isiMessage.Append( aTcc.iResourceSeqId ); |
1496 isiMessage.Append( aTcc.iResourceSeqId ); |
1471 isiMessage.Append( KPadding ); |
1497 isiMessage.Append( KPadding ); |
1495 case KCcResultAllowedWithModifications: |
1521 case KCcResultAllowedWithModifications: |
1496 { |
1522 { |
1497 // First check if this has been modified to a new CALL |
1523 // First check if this has been modified to a new CALL |
1498 CTlv address; |
1524 CTlv address; |
1499 |
1525 |
1500 if ( KErrNone == response.TlvByTagValue( |
1526 if ( KErrNone == response.TlvByTagValue( &address, |
1501 &address, KTlvAddressTag ) ) |
1527 KTlvAddressTag ) ) |
1502 { |
1528 { |
1503 // Original action has been modified to call |
1529 // Original action has been modified to call |
1504 isiMessage.Append( SS_RESOURCE_DENIED ); |
1530 isiMessage.Append( SS_RESOURCE_DENIED ); |
1505 isiMessage.Append( KPadding ); |
1531 isiMessage.Append( KPadding ); |
1506 internalCcResult = KChanged; |
1532 internalCcResult = KChanged; |
1515 isiMessage.Append( SS_RESOURCE_DENIED ); |
1541 isiMessage.Append( SS_RESOURCE_DENIED ); |
1516 isiMessage.Append( KPadding ); |
1542 isiMessage.Append( KPadding ); |
1517 internalCcResult = KChanged; |
1543 internalCcResult = KChanged; |
1518 changedSsServerAction = ETrue; |
1544 changedSsServerAction = ETrue; |
1519 } |
1545 } |
1520 else |
1546 else if ( KErrNone == response.TlvByTagValue( &ssServerString, |
|
1547 KTlvSsStringTag ) ) |
1521 { |
1548 { |
1522 // original SS string has been modified to new SS string |
1549 // original SS string has been modified to new SS string |
1523 isiMessage.Append( SS_RESOURCE_ALLOWED ); |
1550 isiMessage.Append( SS_RESOURCE_ALLOWED ); |
1524 isiMessage.Append( KPadding ); |
1551 isiMessage.Append( KPadding ); |
1525 internalCcResult = KModified; |
1552 internalCcResult = KModified; |
1534 isiMessage.Append( SS_RESOURCE_DENIED ); |
1561 isiMessage.Append( SS_RESOURCE_DENIED ); |
1535 isiMessage.Append( KPadding ); |
1562 isiMessage.Append( KPadding ); |
1536 internalCcResult = KChanged; |
1563 internalCcResult = KChanged; |
1537 changedSsServerAction = ETrue; |
1564 changedSsServerAction = ETrue; |
1538 } |
1565 } |
1539 else |
1566 else if ( KErrNone == response.TlvByTagValue( &ssServerString, |
|
1567 KTlvUssdStringTag ) ) |
1540 { |
1568 { |
1541 // USSD string has been modified to new USSD string |
1569 // USSD string has been modified to new USSD string |
1542 isiMessage.Append( SS_RESOURCE_ALLOWED ); |
1570 isiMessage.Append( SS_RESOURCE_ALLOWED ); |
1543 isiMessage.Append( KPadding ); |
1571 isiMessage.Append( KPadding ); |
1544 internalCcResult = KModified; |
1572 internalCcResult = KModified; |
1662 |
1690 |
1663 TCallControl callcontrol; |
1691 TCallControl callcontrol; |
1664 TInt paramsLength; |
1692 TInt paramsLength; |
1665 TBuf8<KPdpContextActivationParamsMaxSize> paramsBuffer; |
1693 TBuf8<KPdpContextActivationParamsMaxSize> paramsBuffer; |
1666 // store traid's |
1694 // store traid's |
1667 callcontrol.iTransId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1695 callcontrol.iTransId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1668 GPDS_RESOURCE_CONTROL_REQ_OFFSET_UTID ); |
1696 GPDS_RESOURCE_CONTROL_REQ_OFFSET_UTID ); |
1669 callcontrol.iRecourceId = aIsiMessage.Get8bit( |
1697 callcontrol.iRecourceId = aIsiMessage.Get8bit( |
1670 ISI_HEADER_OFFSET_RESOURCEID); |
1698 ISI_HEADER_OFFSET_RESOURCEID); |
1671 callcontrol.iResourceSeqId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1699 callcontrol.iResourceSeqId = aIsiMessage.Get8bit( ISI_HEADER_SIZE + |
1672 GPDS_RESOURCE_CONTROL_IND_OFFSET_SEQUENCEID ); |
1700 GPDS_RESOURCE_CONTROL_IND_OFFSET_SEQUENCEID ); |
1673 |
1701 |
1700 // ----------------------------------------------------------------------------- |
1728 // ----------------------------------------------------------------------------- |
1701 // CSatCC::SendGpdsResourceControlReq |
1729 // CSatCC::SendGpdsResourceControlReq |
1702 // Creates resource control response for modem GPDS server |
1730 // Creates resource control response for modem GPDS server |
1703 // ----------------------------------------------------------------------------- |
1731 // ----------------------------------------------------------------------------- |
1704 // |
1732 // |
1705 void CSatCC::SendGpdsResourceControlReq( |
1733 void CSatCC::SendGpdsResourceControlReq( |
1706 const TCallControl& aTcc, |
1734 const TCallControl& aTcc, |
1707 const TUint8 aResult, |
1735 const TUint8 aResult, |
1708 TPtrC8 aAtkData ) |
1736 TPtrC8 aAtkData ) |
1709 { |
1737 { |
1710 TFLOGSTRING("TSY: CSatCC::SendGpdsResourceControlReq"); |
1738 TFLOGSTRING("TSY: CSatCC::SendGpdsResourceControlReq"); |
1711 OstTrace0( TRACE_NORMAL, CSATCC_SENDGPDSRESOURCECONTROLREQ, "CSatCC::SendGpdsResourceControlReq" ); |
1739 OstTrace0( TRACE_NORMAL, CSATCC_SENDGPDSRESOURCECONTROLREQ, "CSatCC::SendGpdsResourceControlReq" ); |
1712 |
1740 |
1748 } |
1776 } |
1749 case KCcResultAllowedWithModifications: |
1777 case KCcResultAllowedWithModifications: |
1750 { |
1778 { |
1751 // response is modified in GPDS server terminology only if |
1779 // response is modified in GPDS server terminology only if |
1752 // new PDP params are provided |
1780 // new PDP params are provided |
1753 if ( KCcEmptyResponseLenght < aAtkData.Length() |
1781 if ( KCcEmptyResponseLenght < aAtkData.Length() |
1754 && KErrNone == response.TlvByTagValue( ¶msTlv, |
1782 && KErrNone == response.TlvByTagValue( ¶msTlv, |
1755 KTlvPdpContextActivationParametersTag ) ) |
1783 KTlvPdpContextActivationParametersTag ) ) |
1756 { |
1784 { |
1757 isiMessage.Append( GPDS_MODIFIED ); |
1785 isiMessage.Append( GPDS_MODIFIED ); |
1758 isiMessage.AppendFill( KPadding, 3 ); |
1786 isiMessage.AppendFill( KPadding, 3 ); |
1783 { |
1811 { |
1784 // GPDS_ACTIVATE_PDP_CONTEXT_REQUEST is shall be present if and only if |
1812 // GPDS_ACTIVATE_PDP_CONTEXT_REQUEST is shall be present if and only if |
1785 // Resource is GPDS_CC_FOR_GPRS and Result is GPDS_MODIFIED |
1813 // Resource is GPDS_CC_FOR_GPRS and Result is GPDS_MODIFIED |
1786 if ( RSat::EAllowedWithModifications == internalCcResult ) |
1814 if ( RSat::EAllowedWithModifications == internalCcResult ) |
1787 { |
1815 { |
1788 TIsiSubBlock contextParams( |
1816 TIsiSubBlock contextParams( |
1789 isiMessage, |
1817 isiMessage, |
1790 GPDS_ACTIVATE_PDP_CONTEXT_REQUEST, |
1818 GPDS_ACTIVATE_PDP_CONTEXT_REQUEST, |
1791 EIsiSubBlockTypeId8Len16 ); |
1819 EIsiSubBlockTypeId8Len16 ); |
1792 TInt paramsLength( paramsTlv.GetLength() ); |
1820 TInt paramsLength( paramsTlv.GetLength() ); |
1793 // Set data length |
1821 // Set data length |