changeset 9 | 8486d82aef45 |
parent 8 | 6295dc2169f3 |
8:6295dc2169f3 | 9:8486d82aef45 |
---|---|
26 |
26 |
27 #include <pn_const.h> // server id constants |
27 #include <pn_const.h> // server id constants |
28 #include <tisi.h> // isi message |
28 #include <tisi.h> // isi message |
29 #include <uiccisi.h> // UICC server |
29 #include <uiccisi.h> // UICC server |
30 #include <smsisi.h> // sms server |
30 #include <smsisi.h> // sms server |
31 #include <atk_sharedisi.h> |
|
32 #include "OstTraceDefinitions.h" |
31 #include "OstTraceDefinitions.h" |
33 #ifdef OST_TRACE_COMPILER_IN_USE |
32 #ifdef OST_TRACE_COMPILER_IN_USE |
34 #include "satmosmsctrlTraces.h" |
33 #include "satmosmsctrlTraces.h" |
35 #endif |
34 #endif |
36 |
35 |
44 const TUint8 KMaxLengthOfResourceReq = 255; |
43 const TUint8 KMaxLengthOfResourceReq = 255; |
45 const TUint8 KSmControlAllowed = 0; |
44 const TUint8 KSmControlAllowed = 0; |
46 const TUint8 KSmControlNotAllowed = 1; |
45 const TUint8 KSmControlNotAllowed = 1; |
47 const TUint8 KSmControlAllowedWithModif = 2; |
46 const TUint8 KSmControlAllowedWithModif = 2; |
48 const TUint8 KSmsSubmitAddrDataIndex = 3; |
47 const TUint8 KSmsSubmitAddrDataIndex = 3; |
48 const TUint8 KMessageParamsIndex = 0; |
|
49 const TUint8 KCommandTypeMask = 0x03; |
|
50 const TUint8 KSmsCommandAddrIndex = 5; |
|
51 const TUint8 KSmsSubmitAddrIndex = 2; |
|
52 const TUint8 KTpDaTonNpiIndex = 1; |
|
53 const TUint8 KTpDaTonNpiSize = 1; |
|
49 |
54 |
50 // ==================== MEMBER FUNCTIONS ==================================== |
55 // ==================== MEMBER FUNCTIONS ==================================== |
51 |
56 |
52 // ----------------------------------------------------------------------------- |
57 // ----------------------------------------------------------------------------- |
53 // CSatMoSmsCtrl::CSatMoSmsCtrl |
58 // CSatMoSmsCtrl::CSatMoSmsCtrl |
67 iIsMoSmsCtrlActivated( EFalse ), |
72 iIsMoSmsCtrlActivated( EFalse ), |
68 iMoSmsCtrlEnvelopeTransactionId( KZero ), |
73 iMoSmsCtrlEnvelopeTransactionId( KZero ), |
69 iMoSmsCtrlReqTransactionId( KZero ), |
74 iMoSmsCtrlReqTransactionId( KZero ), |
70 iSenderObject( KZero ) |
75 iSenderObject( KZero ) |
71 { |
76 { |
72 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CSATMOSMSCTRL, "CSatMoSmsCtrl::CSatMoSmsCtrl" ); |
77 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CSATMOSMSCTRL_TD, "CSatMoSmsCtrl::CSatMoSmsCtrl" ); |
73 } |
78 } |
74 |
79 |
75 |
80 |
76 // ----------------------------------------------------------------------------- |
81 // ----------------------------------------------------------------------------- |
77 // CSatMoSmsCtrl::ConstructL |
82 // CSatMoSmsCtrl::ConstructL |
78 // Symbian 2nd phase constructor can leave. |
83 // Symbian 2nd phase constructor can leave. |
79 // ----------------------------------------------------------------------------- |
84 // ----------------------------------------------------------------------------- |
80 // |
85 // |
81 void CSatMoSmsCtrl::ConstructL() |
86 void CSatMoSmsCtrl::ConstructL() |
82 { |
87 { |
83 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CONSTRUCTL, "CSatMoSmsCtrl::ConstructL" ); |
88 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CONSTRUCTL_TD, "CSatMoSmsCtrl::ConstructL" ); |
84 #ifdef INFO_PP_ATK_MO_SM_CONTROL |
89 /*#ifdef INFO_PP_ATK_MO_SM_CONTROL |
85 // Check MO SMS control is supported by ME's Product Profile |
90 // Check MO SMS control is supported by ME's Product Profile |
86 iSatMessHandler->InfoPpReadReq( INFO_PP_ATK_MO_SM_CONTROL ); |
91 iSatMessHandler->InfoPpReadReq( INFO_PP_ATK_MO_SM_CONTROL ); |
87 #else |
92 #else |
88 // Check if MO-SMS control should be activated in SMS server |
93 // Check if MO-SMS control should be activated in SMS server |
89 // This is done by sending a request SimReadTableReq to Sim server, with |
94 // This is done by sending a request SimReadTableReq to Sim server, with |
90 // service type KSimStMoSmsSimControlAvail |
95 // service type KSimStMoSmsSimControlAvail |
91 iSatMessHandler->SimReadTableReq( SIM_ST_MO_SMS_SIM_CONTROL_AVAIL ); |
96 iSatMessHandler->SimReadTableReq( SIM_ST_MO_SMS_SIM_CONTROL_AVAIL ); |
92 #endif // INFO_PP_ATK_MO_SM_CONTROL |
97 #endif // INFO_PP_ATK_MO_SM_CONTROL*/ |
93 } |
98 } |
94 |
99 |
95 |
100 |
96 // ----------------------------------------------------------------------------- |
101 // ----------------------------------------------------------------------------- |
97 // CSatMoSmsCtrl::NewL |
102 // CSatMoSmsCtrl::NewL |
102 ( |
107 ( |
103 CSatMessHandler* aSatMessHandler, |
108 CSatMessHandler* aSatMessHandler, |
104 CTsySatMessaging* aSatMessaging |
109 CTsySatMessaging* aSatMessaging |
105 ) |
110 ) |
106 { |
111 { |
107 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_NEWL, "CSatMoSmsCtrl::NewL" ); |
112 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_NEWL_TD, "CSatMoSmsCtrl::NewL" ); |
108 TFLOGSTRING("TSY: CSatMoSmsCtrl::NewL"); |
113 TFLOGSTRING("TSY: CSatMoSmsCtrl::NewL"); |
109 |
114 |
110 CSatMoSmsCtrl* self = |
115 CSatMoSmsCtrl* self = |
111 new( ELeave ) CSatMoSmsCtrl( aSatMessHandler, aSatMessaging ); |
116 new( ELeave ) CSatMoSmsCtrl( aSatMessHandler, aSatMessaging ); |
112 |
117 |
123 // Destructor |
128 // Destructor |
124 // ----------------------------------------------------------------------------- |
129 // ----------------------------------------------------------------------------- |
125 // |
130 // |
126 CSatMoSmsCtrl::~CSatMoSmsCtrl() |
131 CSatMoSmsCtrl::~CSatMoSmsCtrl() |
127 { |
132 { |
128 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_CSATMOSMSCTRL, "CSatMoSmsCtrl::~CSatMoSmsCtrl" ); |
133 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_CSATMOSMSCTRL_TD, "CSatMoSmsCtrl::~CSatMoSmsCtrl" ); |
129 TFLOGSTRING("TSY: CSatMoSmsCtrl::~CSatMoSmsCtrl"); |
134 TFLOGSTRING("TSY: CSatMoSmsCtrl::~CSatMoSmsCtrl"); |
130 } |
135 } |
131 |
136 |
132 |
137 |
133 // ----------------------------------------------------------------------------- |
138 // ----------------------------------------------------------------------------- |
135 // Returns ETrue if MO-SMS Control is activated |
140 // Returns ETrue if MO-SMS Control is activated |
136 // ----------------------------------------------------------------------------- |
141 // ----------------------------------------------------------------------------- |
137 // |
142 // |
138 TBool CSatMoSmsCtrl::IsActivated() |
143 TBool CSatMoSmsCtrl::IsActivated() |
139 { |
144 { |
140 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ISACTIVATED, "CSatMoSmsCtrl::IsActivated" ); |
145 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ISACTIVATED_TD, "CSatMoSmsCtrl::IsActivated" ); |
141 TFLOGSTRING("TSY: CSatMoSmsCtrl::IsActivated"); |
146 TFLOGSTRING("TSY: CSatMoSmsCtrl::IsActivated"); |
142 return iIsMoSmsCtrlActivated; |
147 return iIsMoSmsCtrlActivated; |
143 } |
148 } |
144 |
149 |
145 // ----------------------------------------------------------------------------- |
150 // ----------------------------------------------------------------------------- |
147 // Set iIsMoSmsCtrlActivated to ETrue if MO-SMS Control has to be activated |
152 // Set iIsMoSmsCtrlActivated to ETrue if MO-SMS Control has to be activated |
148 // ----------------------------------------------------------------------------- |
153 // ----------------------------------------------------------------------------- |
149 // |
154 // |
150 void CSatMoSmsCtrl::Activate() |
155 void CSatMoSmsCtrl::Activate() |
151 { |
156 { |
152 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ACTIVATE, "CSatMoSmsCtrl::Activate" ); |
157 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ACTIVATE_TD, "CSatMoSmsCtrl::Activate" ); |
153 TFLOGSTRING("TSY: CSatMoSmsCtrl::Activate"); |
158 TFLOGSTRING("TSY: CSatMoSmsCtrl::Activate"); |
154 iIsMoSmsCtrlActivated = ETrue; |
159 iIsMoSmsCtrlActivated = ETrue; |
155 } |
160 } |
156 |
161 |
157 // ----------------------------------------------------------------------------- |
162 // ----------------------------------------------------------------------------- |
159 // Set iIsMoSmsCtrlActivated to EFalse if MO-SMS Control has to be deactivated |
164 // Set iIsMoSmsCtrlActivated to EFalse if MO-SMS Control has to be deactivated |
160 // ----------------------------------------------------------------------------- |
165 // ----------------------------------------------------------------------------- |
161 // |
166 // |
162 void CSatMoSmsCtrl::Deactivate() |
167 void CSatMoSmsCtrl::Deactivate() |
163 { |
168 { |
164 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_DEACTIVATE, "CSatMoSmsCtrl::Deactivate" ); |
169 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_DEACTIVATE_TD, "CSatMoSmsCtrl::Deactivate" ); |
165 TFLOGSTRING("TSY: CSatMoSmsCtrl::Deactivate"); |
170 TFLOGSTRING("TSY: CSatMoSmsCtrl::Deactivate"); |
166 iIsMoSmsCtrlActivated = EFalse; |
171 iIsMoSmsCtrlActivated = EFalse; |
167 } |
172 } |
168 |
173 |
169 // ----------------------------------------------------------------------------- |
174 // ----------------------------------------------------------------------------- |
174 TInt CSatMoSmsCtrl::UiccCatRespEnvelopeReceived |
179 TInt CSatMoSmsCtrl::UiccCatRespEnvelopeReceived |
175 ( |
180 ( |
176 const TIsiReceiveC& aIsiMessage //Received data notification |
181 const TIsiReceiveC& aIsiMessage //Received data notification |
177 ) |
182 ) |
178 { |
183 { |
179 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_UICCCATRESPENVELOPERECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived" ); |
184 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_UICCCATRESPENVELOPERECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived" ); |
180 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived"); |
185 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived"); |
181 TBuf8<KMaxLengthOfAtkSwDataNtf> addr1; |
186 TBuf8<KMaxLengthOfAtkSwDataNtf> addr1; |
182 TBuf8<KMaxLengthOfAtkSwDataNtf> addr2; |
187 TBuf8<KMaxLengthOfAtkSwDataNtf> addr2; |
183 iWaitingForEnvelopeResp = EFalse; |
188 iWaitingForEnvelopeResp = EFalse; |
184 |
189 |
219 atkResult = TSatUtility::Sw1Sw2Check( sw1, sw2 ); |
224 atkResult = TSatUtility::Sw1Sw2Check( sw1, sw2 ); |
220 |
225 |
221 if ( KError != atkResult ) // If ATK result is OK |
226 if ( KError != atkResult ) // If ATK result is OK |
222 { |
227 { |
223 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok"); |
228 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok"); |
224 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok" ); |
229 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok" ); |
225 RSat::TAlphaId alphaId; |
230 RSat::TAlphaId alphaId; |
226 alphaId.iAlphaId.Zero(); |
231 alphaId.iAlphaId.Zero(); |
227 TBool isAlphaIdEmpty( EFalse ); |
232 TBool isAlphaIdEmpty( EFalse ); |
228 |
233 |
229 if ( KMaxLengthOfAtkSwDataNtf < apduLength ) // If data length greater than 255 |
234 if ( KMaxLengthOfAtkSwDataNtf < apduLength ) // If data length greater than 255 |
230 { |
235 { |
231 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); |
236 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); |
232 OstTrace0( TRACE_NORMAL, DUP2_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); |
237 OstTrace0( TRACE_NORMAL, DUP2_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); |
233 // Data is not consistent, so not allowed condition |
238 // Data is not consistent, so not allowed condition |
234 if( KSmControlNotAllowed == apduData[0] ) |
239 if( KSmControlNotAllowed == apduData[0] ) |
235 { |
240 { |
236 resourceStatus = SMS_RESOURCE_DENIED; |
241 resourceStatus = SMS_RESOURCE_DENIED; |
237 } |
242 } |
251 iSenderObject ) ); |
256 iSenderObject ) ); |
252 } |
257 } |
253 else if ( apduLength ) // If data length in non zero and less than 255 |
258 else if ( apduLength ) // If data length in non zero and less than 255 |
254 { |
259 { |
255 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 "); |
260 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 "); |
256 OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 " ); |
261 OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 " ); |
257 |
262 |
258 // Note: The alpha id can be provided by the SIM even if the addresses |
263 // Note: The alpha id can be provided by the SIM even if the addresses |
259 // have not been modified. |
264 // have not been modified. |
260 ParseAtkSwDataNtf( apduData, addr1, addr2, alphaId, isAlphaIdEmpty ); |
265 ParseAtkSwDataNtf( apduData, addr1, addr2, alphaId, isAlphaIdEmpty ); |
261 |
266 |
273 { |
278 { |
274 resourceStatus = SMS_RESOURCE_ALLOWED; |
279 resourceStatus = SMS_RESOURCE_ALLOWED; |
275 } |
280 } |
276 FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); |
281 FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); |
277 TFLOGSTRING2("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d",apduData[0] ); |
282 TFLOGSTRING2("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d",apduData[0] ); |
278 OstTrace1( TRACE_NORMAL, DUP4_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d", apduData[0] ); |
283 OstTrace1( TRACE_NORMAL, DUP4_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d", apduData[0] ); |
279 } |
284 } |
280 else |
285 else |
281 { |
286 { |
282 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); |
287 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); |
283 OstTrace0( TRACE_NORMAL, DUP5_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); |
288 OstTrace0( TRACE_NORMAL, DUP5_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); |
284 if( KSmControlNotAllowed == apduData[0] ) |
289 if( KSmControlNotAllowed == apduData[0] ) |
285 { |
290 { |
286 resourceStatus = SMS_RESOURCE_DENIED; |
291 resourceStatus = SMS_RESOURCE_DENIED; |
287 } |
292 } |
288 else |
293 else |
303 } |
308 } |
304 } // end of if statement for data length nonzero and less than 255 |
309 } // end of if statement for data length nonzero and less than 255 |
305 else // block for data length zero |
310 else // block for data length zero |
306 { |
311 { |
307 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0 "); |
312 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0 "); |
308 OstTrace0( TRACE_NORMAL, DUP6_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0" ); |
313 OstTrace0( TRACE_NORMAL, DUP6_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0" ); |
309 TUint8 resourceStatus( SMS_RESOURCE_ALLOWED ); |
314 TUint8 resourceStatus( SMS_RESOURCE_ALLOWED ); |
310 FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); |
315 FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); |
311 }// end of block with data length zero |
316 }// end of block with data length zero |
312 |
317 |
313 // If AlphaID is present, the client SatServer |
318 // If AlphaID is present, the client SatServer |
347 } |
352 } |
348 } |
353 } |
349 else // else for UICC status not ok |
354 else // else for UICC status not ok |
350 { |
355 { |
351 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult "); |
356 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult "); |
352 OstTrace0( TRACE_NORMAL, DUP7_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult" ); |
357 OstTrace0( TRACE_NORMAL, DUP7_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult" ); |
353 TUint8 resourceStatus = SMS_RESOURCE_DENIED; |
358 TUint8 resourceStatus = SMS_RESOURCE_DENIED; |
354 FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); |
359 FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); |
355 } |
360 } |
356 } // end if if UICC status is ok |
361 } // end if if UICC status is ok |
357 |
362 |
375 ( |
380 ( |
376 const TIsiReceiveC& aIsiMessage //Received data notification |
381 const TIsiReceiveC& aIsiMessage //Received data notification |
377 ) |
382 ) |
378 { |
383 { |
379 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL"); |
384 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL"); |
380 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL, "CSatMoSmsCtrl::SmsResourceIndReceivedL" ); |
385 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL" ); |
381 |
386 |
382 TUint sbOffset; |
387 TUint sbOffset; |
383 |
388 |
384 // Save the transaction id, which is going to |
389 // Save the transaction id, which is going to |
385 // be re-used in the resp. |
390 // be re-used in the resp. |
451 else |
456 else |
452 { |
457 { |
453 iUserDataSubblock.Zero(); |
458 iUserDataSubblock.Zero(); |
454 } |
459 } |
455 |
460 |
456 //Check if location data is present. Otherwise response to SmsResourceInd |
461 //Check if location data is present. Otherwise response to SmsResourceInd |
457 //is always ALLOWED. |
462 //is always ALLOWED. |
458 if ( !iSatMessHandler->ServiceAvailable() ) |
463 if ( !iSatMessHandler->ServiceAvailable() ) |
459 { |
464 { |
460 TBuf8<KMaxLengthOfResourceReq> dataResp; |
465 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL: Not Allowed Condition, Send response to SMS server"); |
461 TIsiSend resourceReq( dataResp ); |
466 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL: Not Allowed conditon, Send response to SMS server" ); |
462 |
467 |
463 dataResp.AppendFill( KPadding, 1); // filer byte |
468 SendSmsResourceReq( |
464 dataResp.Append( 5 ); // no of Subblocks |
469 SMS_RESOURCE_ALLOWED, |
465 |
470 SMS_CAUSE_TYPE_COMMON, |
466 // Add first SB Resource Subblock |
471 SMS_OK ); |
467 TIsiSubBlock resource( dataResp, SMS_SB_RESOURCE , |
472 } |
468 EIsiSubBlockTypeId16Len16 ); // Message ID and Subblock length |
473 else |
469 |
474 { |
470 dataResp.Append( iResourceId >> 8 ); // SMS Resource IDs MSB |
|
471 |
|
472 dataResp.Append( iResourceId ); // SMS resource IDs LSB |
|
473 |
|
474 dataResp.AppendFill( KPadding,2 ); // Filler Bytes |
|
475 resource.CompleteSubBlock(); |
|
476 |
|
477 // Add 2nd resource sequence ID subblock |
|
478 |
|
479 TIsiSubBlock resourceSeqId( dataResp, SMS_SB_RESOURCE_SEQ_ID , |
|
480 EIsiSubBlockTypeId16Len16 ); |
|
481 dataResp.Append(iSequenceId); // Sequence ID |
|
482 dataResp.AppendFill( KPadding, 3 ); |
|
483 resourceSeqId.CompleteSubBlock(); |
|
484 |
|
485 |
|
486 // Add Third subblock SMS_SB_RESOURCE_STATUS |
|
487 |
|
488 TIsiSubBlock resourceStatus( dataResp, SMS_SB_RESOURCE_STATUS , |
|
489 EIsiSubBlockTypeId16Len16 ); |
|
490 dataResp.Append( SMS_RESOURCE_ALLOWED ); // Resource status |
|
491 dataResp.AppendFill( KPadding, 3 ); |
|
492 resourceStatus.CompleteSubBlock(); |
|
493 |
|
494 // Add 4th subblock SMS_SB_ADDRESS (SMSC) |
|
495 TIsiSubBlock addressSb( dataResp, SMS_SB_ADDRESS , |
|
496 EIsiSubBlockTypeId16Len16 ); |
|
497 dataResp.Append( SMS_SMSC_ADDRESS ); // Addrees Type |
|
498 dataResp.Append( iAddressSubblock.Length() ); |
|
499 dataResp.Append( iAddressSubblock ); |
|
500 |
|
501 // Filler bytes calculation for SMSC address subblock |
|
502 TUint8 fillbytes = 0; |
|
503 while(( iAddressSubblock.Length()+ 6 + fillbytes )%4) |
|
504 { |
|
505 fillbytes++; |
|
506 } |
|
507 |
|
508 dataResp.AppendFill( KPadding,fillbytes ); |
|
509 addressSb.CompleteSubBlock(); |
|
510 |
|
511 // Add 5th Subblock SMS_SB_TPDU (Destination address) |
|
512 |
|
513 TIsiSubBlock userDataSb( dataResp, SMS_SB_TPDU , |
|
514 EIsiSubBlockTypeId16Len16 ); |
|
515 dataResp.Append( iUserDataSubblock.Length() ); // Addrees Length |
|
516 dataResp.Append( KPadding ); |
|
517 dataResp.Append( iUserDataSubblock ); |
|
518 |
|
519 // Filler bytes calculation for user data subblock |
|
520 fillbytes = 0; |
|
521 while(( iUserDataSubblock.Length()+ 6 + fillbytes )%4 ) |
|
522 { |
|
523 fillbytes++; |
|
524 } |
|
525 |
|
526 dataResp.AppendFill( KPadding,fillbytes ); |
|
527 userDataSb.CompleteSubBlock(); |
|
528 |
|
529 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceived: Not Allowed Condition, Send response to SMS server"); |
|
530 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVED, "CSatMoSmsCtrl::SmsResourceIndReceived: Not Allowed conditon, Send response to SMS server" ); |
|
531 |
|
532 // Send Req to Sms server with allowed status |
|
533 iSatMessHandler->SendSmsResourceReq( |
|
534 iMoSmsCtrlReqTransactionId, |
|
535 dataResp, |
|
536 iSenderObject ); |
|
537 } |
|
538 else |
|
539 { |
|
540 if( iIsMoSmsCtrlActivated ) // Check is MO SMS is activated or not |
475 if( iIsMoSmsCtrlActivated ) // Check is MO SMS is activated or not |
541 { |
476 { |
542 TPtrC8 addressData2; |
477 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL, Send envelope"); |
543 |
478 OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL, Send envelope" ); |
544 if ( iUserDataSubblock.Length() ) |
|
545 { |
|
546 // check for message type |
|
547 // Whether its a command type message or Submit type |
|
548 if(KSmsCommandType == ( iUserDataSubblock[0]& 0x03 )) |
|
549 { |
|
550 iMessageType = KSmsCommandType; |
|
551 TPtrC8 phoneNumber = &iUserDataSubblock[5]; |
|
552 // Addition of two for Type of number semi octet |
|
553 addressData2.Set( |
|
554 phoneNumber.Mid( 1, (iUserDataSubblock[5]/2)+1 ) ); |
|
555 } |
|
556 else if( KSmsSubmitType == ( iUserDataSubblock[0] & 0x03 ) ) |
|
557 { |
|
558 iMessageType = KSmsSubmitType; |
|
559 TPtrC8 phoneNumber = &iUserDataSubblock[2]; |
|
560 // Addition of two for Type of number semi octet |
|
561 addressData2.Set( |
|
562 phoneNumber.Mid( 1, (iUserDataSubblock[2]/2)+1 ) ); |
|
563 } |
|
564 } |
|
565 // Dialled Number String, the length has to be removed (first byte) |
|
566 |
479 |
567 iMoSmsCtrlEnvelopeTransactionId = iSatMessaging->GetTransactionId(); |
480 iMoSmsCtrlEnvelopeTransactionId = iSatMessaging->GetTransactionId(); |
568 |
481 FormMoSmsCtrlEnvelope(); |
569 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceived, Send envelope"); |
|
570 OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVED, "CSatMoSmsCtrl::SmsResourceIndReceived, Send envelope" ); |
|
571 |
|
572 // The envelope is sent if MO SMS is activated |
|
573 // iAddressSubblock is not sent as it's received |
|
574 // from SMS server because of iAddressSubblock's first |
|
575 // byte is length of the address data and MO SMS Control envelope |
|
576 // is NOT allowed to contain that in address data. So length |
|
577 // field is skipped |
|
578 SendMoSmsCtrlEnvelope( |
|
579 iMoSmsCtrlEnvelopeTransactionId, |
|
580 iAddressSubblock.Mid( 1, iAddressSubblock.Length() - 1 ), |
|
581 addressData2 |
|
582 ); |
|
583 } |
482 } |
584 else // If MO SMS is not activated |
483 else // If MO SMS is not activated |
585 { |
484 { |
586 TBuf8<KMaxLengthOfResourceReq> dataResp; |
485 SendSmsResourceReq( |
587 TIsiSend resourceReq( dataResp ); |
486 SMS_RESOURCE_DENIED, |
588 |
487 SMS_CAUSE_TYPE_COMMON, |
589 dataResp.AppendFill( KPadding, 1 ); // filer byte |
488 SMS_ERR_ROUTE_NOT_ALLOWED ); |
590 dataResp.Append( 4 ); // no of Subblocks |
489 } |
591 |
490 } |
592 // Add first SB Resource Subblock |
|
593 TIsiSubBlock resource( dataResp, SMS_SB_RESOURCE , |
|
594 EIsiSubBlockTypeId16Len16 ); // Message ID and Subblock length |
|
595 |
|
596 dataResp.Append( iResourceId >> 8 ); // SMS Resource IDs MSB |
|
597 |
|
598 dataResp.Append( iResourceId ); // SMS resource IDs LSB |
|
599 |
|
600 dataResp.AppendFill( KPadding, 2 ); // Filler Bytes |
|
601 resource.CompleteSubBlock(); |
|
602 |
|
603 // Add 2nd resource sequence ID subblock |
|
604 |
|
605 TIsiSubBlock resourceSeqId( dataResp, SMS_SB_RESOURCE_SEQ_ID , |
|
606 EIsiSubBlockTypeId16Len16 ); |
|
607 dataResp.Append( iSequenceId ); // Sequence ID |
|
608 dataResp.AppendFill( KPadding, 3 ); |
|
609 resourceSeqId.CompleteSubBlock(); |
|
610 |
|
611 // Add Third subblock |
|
612 |
|
613 TIsiSubBlock resourceStatus( dataResp, SMS_SB_RESOURCE_STATUS , |
|
614 EIsiSubBlockTypeId16Len16 ); |
|
615 dataResp.Append( SMS_RESOURCE_DENIED ); // Resource status |
|
616 dataResp.AppendFill( KPadding, 3 ); |
|
617 resourceStatus.CompleteSubBlock(); |
|
618 |
|
619 // No address and User data Subblocks because Here resource ID is not the activated |
|
620 |
|
621 // Add cause subblock |
|
622 |
|
623 TIsiSubBlock sbCause( dataResp,SMS_SB_CAUSE, |
|
624 EIsiSubBlockTypeId16Len16 ); |
|
625 |
|
626 dataResp.Append( SMS_CAUSE_TYPE_COMMON ); |
|
627 dataResp.Append( SMS_ERR_ROUTE_NOT_ALLOWED ); |
|
628 dataResp.Append( KPadding, 2 ); |
|
629 |
|
630 // Send resp to Sms server with not allowed status |
|
631 iSatMessHandler->SendSmsResourceReq( |
|
632 iMoSmsCtrlReqTransactionId, |
|
633 dataResp, |
|
634 iSenderObject ); |
|
635 |
|
636 } |
|
637 } |
|
638 |
|
639 } |
491 } |
640 |
492 |
641 // ----------------------------------------------------------------------------- |
493 // ----------------------------------------------------------------------------- |
642 // CSatMoSmsCtrl::SendMoSmsCtrlEnvelope |
494 // CSatMoSmsCtrl::SendMoSmsCtrlEnvelope |
643 // Send an envelope to SIM server in order to check wheter the SMS |
495 // Send an envelope to SIM server in order to check wheter the SMS |
650 TUint8 aTraId, |
502 TUint8 aTraId, |
651 const TDesC8& aAddressData1, |
503 const TDesC8& aAddressData1, |
652 const TDesC8& aAddressData2 |
504 const TDesC8& aAddressData2 |
653 ) |
505 ) |
654 { |
506 { |
655 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDMOSMSCTRLENVELOPE, "CSatMoSmsCtrl::SendMoSmsCtrlEnvelope" ); |
507 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDMOSMSCTRLENVELOPE_TD, "CSatMoSmsCtrl::SendMoSmsCtrlEnvelope" ); |
656 TFLOGSTRING("TSY:CSatMoSmsCtrl::SendMoSmsCtrlEnvelope"); |
508 TFLOGSTRING("TSY:CSatMoSmsCtrl::SendMoSmsCtrlEnvelope"); |
657 |
509 |
658 // Get location info |
510 // Get location info |
659 const CSatMessHandler::TLocationInfo& locInfo |
511 const CSatMessHandler::TLocationInfo& locInfo |
660 = iSatMessHandler->LocationInfo(); |
512 = iSatMessHandler->LocationInfo(); |
709 TDes8& aAddr2, |
561 TDes8& aAddr2, |
710 RSat::TAlphaId& aAlphaId, |
562 RSat::TAlphaId& aAlphaId, |
711 TBool& aEmptyAlphaId |
563 TBool& aEmptyAlphaId |
712 ) |
564 ) |
713 { |
565 { |
714 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_PARSEATKSWDATANTF, "CSatMoSmsCtrl::ParseAtkSwDataNtf" ); |
566 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_PARSEATKSWDATANTF_TD, "CSatMoSmsCtrl::ParseAtkSwDataNtf" ); |
715 TFLOGSTRING("TSY:CSatMoSmsCtrl::ParseAtkSwDataNtf"); |
567 TFLOGSTRING("TSY:CSatMoSmsCtrl::ParseAtkSwDataNtf"); |
716 |
568 |
717 // Input data: |
569 // Input data: |
718 // aAtkData[0] : result |
570 // aAtkData[0] : result |
719 // aAtkData[1][2] : length of BER-TLV, set n=1 if aAtkData[1]=0x81 |
571 // aAtkData[1][2] : length of BER-TLV, set n=1 if aAtkData[1]=0x81 |
736 TUint8 tag( aAtkData[indexInBerTlv] ); |
588 TUint8 tag( aAtkData[indexInBerTlv] ); |
737 TUint8 lengthBerTlv( 0 ); |
589 TUint8 lengthBerTlv( 0 ); |
738 TInt n( (KTwoByteLengthCoding == tag)?1:0 ); |
590 TInt n( (KTwoByteLengthCoding == tag)?1:0 ); |
739 lengthBerTlv = aAtkData[1 + n]; |
591 lengthBerTlv = aAtkData[1 + n]; |
740 indexInBerTlv = 2 + n; |
592 indexInBerTlv = 2 + n; |
741 |
593 // MO SMS control result |
594 TUint8 moSmsResult( aAtkData[0] ); |
|
742 // Extract TLVs and fill in output variables |
595 // Extract TLVs and fill in output variables |
743 TBool address1_got( EFalse ); |
596 TBool address1_got( EFalse ); |
744 while( lengthBerTlv ) |
597 while( lengthBerTlv ) |
745 { |
598 { |
746 // Get tag value without 'comprehension required' bit |
599 // Get tag value without 'comprehension required' bit |
749 TInt nn( ( KTwoByteLengthCoding == aAtkData[indexInBerTlv+1] )?1:0 ); |
602 TInt nn( ( KTwoByteLengthCoding == aAtkData[indexInBerTlv+1] )?1:0 ); |
750 // Length of TLV |
603 // Length of TLV |
751 TInt lengthTlv( aAtkData[indexInBerTlv+nn+1] ); |
604 TInt lengthTlv( aAtkData[indexInBerTlv+nn+1] ); |
752 // Check what TLV is received |
605 // Check what TLV is received |
753 if ( ( KTlvAddressTag == tag ) |
606 if ( ( KTlvAddressTag == tag ) |
754 && ( !address1_got ) ) |
607 && ( !address1_got ) |
608 && KSmControlAllowedWithModif == moSmsResult ) |
|
755 { |
609 { |
756 // RP address first |
610 // RP address first |
757 address1_got = ETrue; |
611 address1_got = ETrue; |
758 // Copy data to output variable |
612 // Copy data to output variable |
759 aAddr1.Copy( aAtkData.Mid( indexInBerTlv + nn + 2, |
613 aAddr1.Copy( aAtkData.Mid( indexInBerTlv + nn + 2, |
762 KReservedTonNpi1!=aAddr1[0] && KReservedTonNpi2!=aAddr1[0] ) |
616 KReservedTonNpi1!=aAddr1[0] && KReservedTonNpi2!=aAddr1[0] ) |
763 { |
617 { |
764 CleanAddressData( aAddr1 ); |
618 CleanAddressData( aAddr1 ); |
765 } |
619 } |
766 } |
620 } |
767 else if ( KTlvAddressTag == tag ) |
621 else if ( KTlvAddressTag == tag |
622 && KSmControlAllowedWithModif == moSmsResult ) |
|
768 { |
623 { |
769 // TP address |
624 // TP address |
770 // Copy data to output variable |
625 // Copy data to output variable |
771 aAddr2.Copy( aAtkData.Mid( indexInBerTlv + nn + 2, |
626 aAddr2.Copy( aAtkData.Mid( indexInBerTlv + nn + 2, |
772 lengthTlv ) ); |
627 lengthTlv ) ); |
792 |
647 |
793 } |
648 } |
794 else |
649 else |
795 { |
650 { |
796 TFLOGSTRING("TSY: CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag."); |
651 TFLOGSTRING("TSY: CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag."); |
797 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_PARSEATKSWDATANTF, "CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag." ); |
652 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_PARSEATKSWDATANTF_TD, "CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag." ); |
798 |
653 |
799 } |
654 } |
800 |
655 |
801 // update length for the while loop |
656 // update length for the while loop |
802 lengthBerTlv -= ( lengthTlv+2+nn ); |
657 lengthBerTlv -= ( lengthTlv+2+nn ); |
814 void CSatMoSmsCtrl::CleanAddressData |
669 void CSatMoSmsCtrl::CleanAddressData |
815 ( |
670 ( |
816 TDes8& aAddr |
671 TDes8& aAddr |
817 ) |
672 ) |
818 { |
673 { |
819 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CLEANADDRESSDATA, "CSatMoSmsCtrl::CleanAddressData" ); |
674 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CLEANADDRESSDATA_TD, "CSatMoSmsCtrl::CleanAddressData" ); |
820 TFLOGSTRING("TSY: CSatMoSmsCtrl::CleanAddressData"); |
675 TFLOGSTRING("TSY: CSatMoSmsCtrl::CleanAddressData"); |
821 // Starts from index 1, since index 0 is for TON/NPI |
676 // Starts from index 1, since index 0 is for TON/NPI |
822 for ( TInt i=1; i < aAddr.Length(); i++ ) |
677 for ( TInt i=1; i < aAddr.Length(); i++ ) |
823 { |
678 { |
824 if ( 0xF0==(aAddr[i]&0xF0) ) |
679 if ( 0xF0==(aAddr[i]&0xF0) ) |
848 ( |
703 ( |
849 TDes8& aRPAddr, |
704 TDes8& aRPAddr, |
850 TDes8& aTPAddr |
705 TDes8& aTPAddr |
851 ) |
706 ) |
852 { |
707 { |
853 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_VERIFYSIMRESPDATA, "CSatMoSmsCtrl::VerifySimRespData" ); |
708 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_VERIFYSIMRESPDATA_TD, "CSatMoSmsCtrl::VerifySimRespData" ); |
854 TBool ret( ETrue ); |
709 TBool ret( ETrue ); |
855 if ( ( 0==aRPAddr.Length() && 0==aTPAddr.Length() ) |
710 if ( ( 0==aRPAddr.Length() && 0==aTPAddr.Length() ) |
856 || ( KMaxLengthAddr1Addr2 <= ( aRPAddr.Length()+aTPAddr.Length() ) ) |
711 || ( KMaxLengthAddr1Addr2 <= ( aRPAddr.Length()+aTPAddr.Length() ) ) |
857 ) |
712 ) |
858 { |
713 { |
925 { |
780 { |
926 // Increment subblock |
781 // Increment subblock |
927 data[1]++; |
782 data[1]++; |
928 // Copy address subblocks from Indication message |
783 // Copy address subblocks from Indication message |
929 // Add Address Subblock |
784 // Add Address Subblock |
930 TIsiSubBlock address( |
785 TIsiSubBlock address( |
931 data, |
786 data, |
932 SMS_SB_ADDRESS , |
787 SMS_SB_ADDRESS , |
933 EIsiSubBlockTypeId16Len16 ); |
788 EIsiSubBlockTypeId16Len16 ); |
934 data.Append( SMS_SMSC_ADDRESS ); // Address type |
789 data.Append( SMS_SMSC_ADDRESS ); // Address type |
935 data.Append( iAddressSubblock.Length() ); // Address data length |
790 data.Append( iAddressSubblock.Length() ); // Address data length |
936 data.Append( iAddressSubblock ); |
791 data.Append( iAddressSubblock ); |
938 address.CompleteSubBlock(); |
793 address.CompleteSubBlock(); |
939 |
794 |
940 // increment subblock |
795 // increment subblock |
941 data[1]++; |
796 data[1]++; |
942 // Add User Data Subblock |
797 // Add User Data Subblock |
943 TIsiSubBlock userData( |
798 TIsiSubBlock userData( |
944 data, |
799 data, |
945 SMS_SB_TPDU , |
800 SMS_SB_TPDU , |
946 EIsiSubBlockTypeId16Len16 ); |
801 EIsiSubBlockTypeId16Len16 ); |
947 data.Append( iUserDataSubblock.Length() ); // data Length |
802 data.Append( iUserDataSubblock.Length() ); // data Length |
948 data.Append( KPadding ); // Filler Byte |
803 data.Append( KPadding ); // Filler Byte |
949 data.Append( iUserDataSubblock ); // Data Bytes |
804 data.Append( iUserDataSubblock ); // Data Bytes |
956 if ( address1.Length() ) |
811 if ( address1.Length() ) |
957 { |
812 { |
958 // Add Address subblock |
813 // Add Address subblock |
959 data[1]++; // increase no of subblocks |
814 data[1]++; // increase no of subblocks |
960 |
815 |
961 TIsiSubBlock address( |
816 TIsiSubBlock address( |
962 data, |
817 data, |
963 SMS_SB_ADDRESS , |
818 SMS_SB_ADDRESS , |
964 EIsiSubBlockTypeId16Len16 ); |
819 EIsiSubBlockTypeId16Len16 ); |
965 data.Append(SMS_SMSC_ADDRESS); // Address Type |
820 data.Append(SMS_SMSC_ADDRESS); // Address Type |
966 |
821 |
967 // Data in bytes |
822 // Data in bytes |
968 // First byte is the address length in 3GPP, GSM_0411 format |
823 // First byte is the address length in 3GPP, GSM_0411 format |
969 // "data length in bytes, including TON & NPI". |
824 // "data length in bytes, including TON & NPI". |
970 data.Append( address1.Length() + 1 ); |
825 data.Append( address1.Length() + 1 ); |
971 // Actual address data. |
826 // Actual address data. |
972 data.Append( address1.Length()); |
827 data.Append( address1.Length()); |
973 data.Append( address1 ); |
828 data.Append( address1 ); |
974 address.CompleteSubBlock(); |
829 address.CompleteSubBlock(); |
975 } // end of Service centre Address Subblock |
830 } // end of Service centre Address Subblock |
976 |
831 |
977 // Add subblock for Address2 (Destination address, TP) if present |
832 // Add subblock for Address2 (Destination address, TP) if present |
978 if ( address2.Length() ) |
833 if ( address2.Length() ) |
979 { |
834 { |
980 // Add subblock |
835 // Add subblock |
981 data[1]++; |
836 data[1]++; |
982 |
837 |
983 // For User Data Subblock |
838 // For User Data Subblock |
984 TIsiSubBlock userDataSb( |
839 TIsiSubBlock userDataSb( |
985 data, |
840 data, |
986 SMS_SB_TPDU, |
841 SMS_SB_TPDU, |
987 EIsiSubBlockTypeId16Len16 ); |
842 EIsiSubBlockTypeId16Len16 ); |
988 |
843 |
989 // Check what type of TPDU to be sent |
844 // Check what type of TPDU to be sent |
990 switch( iMessageType ) |
845 switch( iMessageType ) |
1052 iUserDataSubblock[2] = ( ( address2.Length() - 1 ) * 2 ); |
907 iUserDataSubblock[2] = ( ( address2.Length() - 1 ) * 2 ); |
1053 } |
908 } |
1054 |
909 |
1055 // old addresss needs to be deleted before new one can be inserted |
910 // old addresss needs to be deleted before new one can be inserted |
1056 // to the tpdu |
911 // to the tpdu |
1057 iUserDataSubblock.Delete( |
912 iUserDataSubblock.Delete( |
1058 KSmsSubmitAddrDataIndex, |
913 KSmsSubmitAddrDataIndex, |
1059 oldAddrLen + 1 ); |
914 oldAddrLen + 1 ); |
1060 iUserDataSubblock.Insert( |
915 iUserDataSubblock.Insert( |
1061 KSmsSubmitAddrDataIndex, |
916 KSmsSubmitAddrDataIndex, |
1062 address2 ); |
917 address2 ); |
1063 break; |
918 break; |
1064 } |
919 } |
1065 default: |
920 default: |
1075 } |
930 } |
1076 if( SMS_RESOURCE_DENIED == status ) |
931 if( SMS_RESOURCE_DENIED == status ) |
1077 { |
932 { |
1078 // Add SMS_SB_CAUSE subblock |
933 // Add SMS_SB_CAUSE subblock |
1079 data[1]++; //Increment no of subblocks |
934 data[1]++; //Increment no of subblocks |
1080 TIsiSubBlock cause( |
935 TIsiSubBlock cause( |
1081 data, |
936 data, |
1082 SMS_SB_CAUSE , |
937 SMS_SB_CAUSE , |
1083 EIsiSubBlockTypeId16Len16 ); |
938 EIsiSubBlockTypeId16Len16 ); |
1084 data.Append( SMS_CAUSE_TYPE_COMMON ); // Cause type |
939 data.Append( SMS_CAUSE_TYPE_COMMON ); // Cause type |
1085 data.Append( SMS_ERR_ROUTE_NOT_ALLOWED ); // Cause |
940 data.Append( SMS_ERR_ROUTE_NOT_ALLOWED ); // Cause |
1086 cause.CompleteSubBlock(); |
941 cause.CompleteSubBlock(); |
1095 TInt CSatMoSmsCtrl::MessageReceivedL |
950 TInt CSatMoSmsCtrl::MessageReceivedL |
1096 ( |
951 ( |
1097 const TIsiReceiveC& aIsiMessage |
952 const TIsiReceiveC& aIsiMessage |
1098 ) |
953 ) |
1099 { |
954 { |
1100 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_MESSAGERECEIVED, "CSatMoSmsCtrl::MessageReceived" ); |
955 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_MESSAGERECEIVED_TD, "CSatMoSmsCtrl::MessageReceived" ); |
1101 TFLOGSTRING("TSY: CSatMoSmsCtrl::MessageReceived"); |
956 TFLOGSTRING("TSY: CSatMoSmsCtrl::MessageReceived"); |
1102 // SMS server -> SimAtkTsy : MO-SMS request sent to SAT (KSmsResourceReq) |
957 // SMS server -> SimAtkTsy : MO-SMS request sent to SAT (KSmsResourceReq) |
1103 // UICC server <- SimAtkTsy : Envelope sent to UICC server (KAtkEnvelopeNtf) |
958 // UICC server <- SimAtkTsy : Envelope sent to UICC server (KAtkEnvelopeNtf) |
1104 // UICC server -> SimAtkTsy : AtkSwNtf send to SAT, with modified (or not) |
959 // UICC server -> SimAtkTsy : AtkSwNtf send to SAT, with modified (or not) |
1105 // addresses and parameters (KAtkSwDataNtf) |
960 // addresses and parameters (KAtkSwDataNtf) |
1124 } |
979 } |
1125 case SMS_RESOURCE_RESP: |
980 case SMS_RESOURCE_RESP: |
1126 { |
981 { |
1127 // Take a log |
982 // Take a log |
1128 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server"); |
983 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server"); |
1129 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCERESPRECEIVED, "CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server" ); |
984 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCERESPRECEIVED_TD, "CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server" ); |
1130 |
985 |
1131 break; |
986 break; |
1132 } |
987 } |
1133 default: |
988 default: |
1134 { |
989 { |
1170 } |
1025 } |
1171 } |
1026 } |
1172 return KErrNone; |
1027 return KErrNone; |
1173 } |
1028 } |
1174 |
1029 |
1030 // ----------------------------------------------------------------------------- |
|
1031 // CSatMoSmsCtrl::SendSmsResourceReq |
|
1032 // Constructs and sends SMS_RESOURCE_REQ |
|
1033 // ----------------------------------------------------------------------------- |
|
1034 // |
|
1035 void CSatMoSmsCtrl::SendSmsResourceReq( |
|
1036 TUint8 aResourceStatus, |
|
1037 TUint8 aCauseType, |
|
1038 TUint8 aCause ) |
|
1039 { |
|
1040 TFLOGSTRING("TSY: CSatMoSmsCtrl::SendSmsResourceReq"); |
|
1041 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDSMSRESOURCEREQ_TD, "CSatMoSmsCtrl::SendSmsResourceReq" ); |
|
1042 |
|
1043 TBuf8<KMaxLengthOfResourceReq> dataResp; |
|
1044 TIsiSend resourceReq( dataResp ); |
|
1045 |
|
1046 dataResp.AppendFill( KPadding, 1 ); // filler byte |
|
1047 TUint8 sbCount( 0 ); |
|
1048 if ( SMS_RESOURCE_ALLOWED == aResourceStatus ) |
|
1049 { |
|
1050 sbCount = 5; // in ok case there are 5 subblocks |
|
1051 } |
|
1052 else |
|
1053 { |
|
1054 sbCount = 4; // otherwise 4 |
|
1055 } |
|
1056 dataResp.Append( sbCount ); // no of Subblocks |
|
1057 |
|
1058 // Add first SB Resource Subblock |
|
1059 TIsiSubBlock resource( |
|
1060 dataResp, |
|
1061 SMS_SB_RESOURCE , |
|
1062 EIsiSubBlockTypeId16Len16 ); // Message ID and Subblock length |
|
1063 |
|
1064 dataResp.Append( iResourceId >> 8 ); // SMS Resource IDs MSB |
|
1065 dataResp.Append( iResourceId ); // SMS resource IDs LSB |
|
1066 resource.CompleteSubBlock(); |
|
1067 |
|
1068 // Add 2nd resource sequence ID subblock |
|
1069 TIsiSubBlock resourceSeqId( |
|
1070 dataResp, |
|
1071 SMS_SB_RESOURCE_SEQ_ID , |
|
1072 EIsiSubBlockTypeId16Len16 ); |
|
1073 |
|
1074 dataResp.Append(iSequenceId); // Sequence ID |
|
1075 resourceSeqId.CompleteSubBlock(); |
|
1076 |
|
1077 // Add Third subblock SMS_SB_RESOURCE_STATUS |
|
1078 TIsiSubBlock resourceStatus( |
|
1079 dataResp, |
|
1080 SMS_SB_RESOURCE_STATUS , |
|
1081 EIsiSubBlockTypeId16Len16 ); |
|
1082 |
|
1083 dataResp.Append( aResourceStatus ); // Resource status |
|
1084 resourceStatus.CompleteSubBlock(); |
|
1085 |
|
1086 if ( SMS_RESOURCE_ALLOWED == aResourceStatus ) |
|
1087 { |
|
1088 // Add 4th subblock SMS_SB_ADDRESS (SMSC) |
|
1089 TIsiSubBlock addressSb( |
|
1090 dataResp, |
|
1091 SMS_SB_ADDRESS , |
|
1092 EIsiSubBlockTypeId16Len16 ); |
|
1093 |
|
1094 dataResp.Append( SMS_SMSC_ADDRESS ); // Addrees Type |
|
1095 dataResp.Append( iAddressSubblock.Length() ); |
|
1096 dataResp.Append( iAddressSubblock ); |
|
1097 addressSb.CompleteSubBlock(); |
|
1098 |
|
1099 // Add 5th Subblock SMS_SB_TPDU (Destination address) |
|
1100 TIsiSubBlock userDataSb( |
|
1101 dataResp, |
|
1102 SMS_SB_TPDU , |
|
1103 EIsiSubBlockTypeId16Len16 ); |
|
1104 |
|
1105 dataResp.Append( iUserDataSubblock.Length() ); // Addrees Length |
|
1106 dataResp.Append( KPadding ); |
|
1107 dataResp.Append( iUserDataSubblock ); |
|
1108 userDataSb.CompleteSubBlock(); |
|
1109 } |
|
1110 else |
|
1111 { |
|
1112 // Add cause subblock |
|
1113 TIsiSubBlock sbCause( |
|
1114 dataResp, |
|
1115 SMS_SB_CAUSE, |
|
1116 EIsiSubBlockTypeId16Len16 ); |
|
1117 |
|
1118 dataResp.Append( aCauseType ); |
|
1119 dataResp.Append( aCause ); |
|
1120 sbCause.CompleteSubBlock(); |
|
1121 } |
|
1122 |
|
1123 // Send resp to Sms server with not allowed status |
|
1124 iSatMessHandler->SendSmsResourceReq( |
|
1125 iMoSmsCtrlReqTransactionId, |
|
1126 dataResp, |
|
1127 iSenderObject ); |
|
1128 } |
|
1129 // ----------------------------------------------------------------------------- |
|
1130 // CSatMoSmsCtrl::FormMoSmsCtrlEnvelope |
|
1131 // Forms and sends MO SMS Control envelope |
|
1132 // ----------------------------------------------------------------------------- |
|
1133 // |
|
1134 void CSatMoSmsCtrl::FormMoSmsCtrlEnvelope() |
|
1135 { |
|
1136 TFLOGSTRING("TSY: CSatMoSmsCtrl::FormMoSmsCtrlEnvelope"); |
|
1137 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_FORMMOSMSCTRLENVELOPE_TD, "CSatMoSmsCtrl::FormMoSmsCtrlEnvelope" ); |
|
1138 |
|
1139 TPtrC8 addressData2; |
|
1140 if ( iUserDataSubblock.Length() ) |
|
1141 { |
|
1142 iMessageType = FetchTpDa( iUserDataSubblock, addressData2 ); |
|
1143 } |
|
1144 // no else |
|
1145 |
|
1146 // Dialled Number String, the length has to be removed (first byte) |
|
1147 // The envelope is sent if MO SMS is activated |
|
1148 // iAddressSubblock is not sent as it's received |
|
1149 // from SMS server because of iAddressSubblock's first |
|
1150 // byte is length of the address data and MO SMS Control envelope |
|
1151 // is NOT allowed to contain that in address data. So length |
|
1152 // field is skipped |
|
1153 SendMoSmsCtrlEnvelope( |
|
1154 iMoSmsCtrlEnvelopeTransactionId, |
|
1155 iAddressSubblock.Mid( 1, iAddressSubblock.Length() - 1 ), |
|
1156 addressData2 ); |
|
1157 } |
|
1158 |
|
1159 // ----------------------------------------------------------------------------- |
|
1160 // CSatMoSmsCtrl::FetchTpDa |
|
1161 // Fetches TP-DA contents from TPDU |
|
1162 // ----------------------------------------------------------------------------- |
|
1163 // |
|
1164 TUint8 CSatMoSmsCtrl::FetchTpDa( const TDesC8& aTpdu, TPtrC8& aTpda ) |
|
1165 { |
|
1166 TFLOGSTRING("TSY: CSatMoSmsCtrl::FetchTpDa"); |
|
1167 OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_FETCHTPDA_TD, "CSatMoSmsCtrl::FetchTpDa" ); |
|
1168 |
|
1169 TUint8 ret( 0 ); |
|
1170 |
|
1171 // TP-DA has the following structure |
|
1172 // (see 3GPP TS 23.040 clause 9.1.2.5) |
|
1173 // [0] Address-Length |
|
1174 // [1] TonNpi |
|
1175 // [2..] Address-Value ADN encoding |
|
1176 // resulting descriptor contains TonNpi+Address-Value |
|
1177 // 'Address-Length' does not count filler byte if it is present, so it |
|
1178 // can be odd value. If it is we need to add 1 and then divide by 2 to |
|
1179 // calculate number of bytes. Although if it is even, then adding 1 will |
|
1180 // give us odd value which gives the same number of bytes after integer |
|
1181 // division by 2. |
|
1182 // So we always add 1 to Address-Length inside TP-DA |
|
1183 if ( KSmsCommandType == ( aTpdu[KMessageParamsIndex] & KCommandTypeMask ) ) |
|
1184 { |
|
1185 ret = KSmsCommandType; |
|
1186 TUint8 addressLength = aTpdu[KSmsCommandAddrIndex] + 1; |
|
1187 aTpda.Set( aTpdu.Mid( |
|
1188 KSmsCommandAddrIndex + KTpDaTonNpiIndex, |
|
1189 addressLength/2 + KTpDaTonNpiSize ) ); |
|
1190 } |
|
1191 else if ( KSmsSubmitType == ( aTpdu[KMessageParamsIndex] & KCommandTypeMask ) ) |
|
1192 { |
|
1193 ret = KSmsSubmitType; |
|
1194 TUint8 addressLength = aTpdu[KSmsSubmitAddrIndex] + 1; |
|
1195 aTpda.Set( aTpdu.Mid( |
|
1196 KSmsSubmitAddrIndex + KTpDaTonNpiIndex, |
|
1197 addressLength/2 + KTpDaTonNpiSize ) ); |
|
1198 } |
|
1199 // no else |
|
1200 |
|
1201 return ret; |
|
1202 } |
|
1175 // End of File |
1203 // End of File |