32 #include <etelsat.h> // for Sat MO SM Control error values |
32 #include <etelsat.h> // for Sat MO SM Control error values |
33 |
33 |
34 |
34 |
35 // ======== MEMBER FUNCTIONS ======== |
35 // ======== MEMBER FUNCTIONS ======== |
36 |
36 |
37 CMmSmsTsy::CMmSmsTsy() |
37 CMmSmsTsy::CMmSmsTsy(): |
|
38 iReqHandleType(EMultimodeSmsReqHandleUnknown) |
38 { |
39 { |
39 TFLOGSTRING("TSY: CMmSmsTsy::CMmSmsTsy: constructor"); |
40 TFLOGSTRING("TSY: CMmSmsTsy::CMmSmsTsy: constructor"); |
40 } |
41 } |
41 |
42 |
42 void CMmSmsTsy::ConstructL() |
43 void CMmSmsTsy::ConstructL() |
283 ret = ReadSmspListPhase2( aTsyReqHandle, reinterpret_cast< |
284 ret = ReadSmspListPhase2( aTsyReqHandle, reinterpret_cast< |
284 RMobilePhone::TClientId*>( dataPtr ), aPackage.Des2n() ); |
285 RMobilePhone::TClientId*>( dataPtr ), aPackage.Des2n() ); |
285 break; |
286 break; |
286 // SMS messaging requests that need trapping |
287 // SMS messaging requests that need trapping |
287 default: |
288 default: |
288 // reset last tsy request type |
289 // Ensure the ReqHandleType is unset. |
289 iReqHandleType = EMultimodeSmsReqHandleUnknown; |
290 // This will detect cases where this method indirectly calls itself |
|
291 // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost). |
|
292 // Such cases are not supported because iReqHandleType is in the context of this class instance, |
|
293 // not this request, and we don't want the values set by the inner request and the outer request |
|
294 // interfering with each other. |
|
295 __ASSERT_DEBUG(iReqHandleType==EMultimodeSmsReqHandleUnknown, User::Invariant()); |
290 |
296 |
291 TInt leaveCode( KErrNone ); |
297 TInt leaveCode( KErrNone ); |
292 TRAP( leaveCode, ret = DoExtFuncL( aTsyReqHandle, aIpc, |
298 TRAP( leaveCode, ret = DoExtFuncL( aTsyReqHandle, aIpc, |
293 aPackage ); ); |
299 aPackage ); ); |
294 |
300 |
306 #else |
312 #else |
307 //Never comes here. See SetTypeOfResponse. |
313 //Never comes here. See SetTypeOfResponse. |
308 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, |
314 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, |
309 aTsyReqHandle ); |
315 aTsyReqHandle ); |
310 #endif // REQHANDLE_TIMER |
316 #endif // REQHANDLE_TIMER |
|
317 // We've finished with this value now. Clear it so it doesn't leak |
|
318 // up to any other instances of this method down the call stack |
|
319 iReqHandleType = EMultimodeSmsReqHandleUnknown; |
311 } |
320 } |
312 break; |
321 break; |
313 } |
322 } |
314 } |
323 } |
315 |
324 |
743 if ( iNotifyReceiveModeChangePtr ) |
752 if ( iNotifyReceiveModeChangePtr ) |
744 { |
753 { |
745 *iNotifyReceiveModeChangePtr = iMobileSmsReceiveMode; |
754 *iNotifyReceiveModeChangePtr = iMobileSmsReceiveMode; |
746 } |
755 } |
747 ReqCompleted( reqHandle, KErrNone ); |
756 ReqCompleted( reqHandle, KErrNone ); |
748 iNotifyReceiveModeChangePtr = NULL; |
|
749 } |
757 } |
750 } |
758 } |
751 |
759 |
752 //---------------------------------------------------------------------------- |
760 //---------------------------------------------------------------------------- |
753 // CMmSmsTsy::ReceiveMessageL |
761 // CMmSmsTsy::ReceiveMessageL |
1325 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1333 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1326 EMultimodeSmsAckStored ); |
1334 EMultimodeSmsAckStored ); |
1327 if ( reqHandle ) |
1335 if ( reqHandle ) |
1328 { |
1336 { |
1329 ReqCompleted( reqHandle, aError ); |
1337 ReqCompleted( reqHandle, aError ); |
|
1338 } |
|
1339 |
|
1340 if (aError != KErrNone) |
|
1341 { |
|
1342 // Ack error from LTSY. Need to reject receive messege request, to force the client to repost it. |
|
1343 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(EMultimodeSmsReceiveMessage); |
|
1344 if( reqHandle != 0 ) |
|
1345 { |
|
1346 ReqCompleted(reqHandle, KErrGeneral); |
|
1347 } |
|
1348 iServerRoutingActivity = ERoutingNotActivated; |
1330 } |
1349 } |
1331 } |
1350 } |
1332 |
1351 |
1333 //---------------------------------------------------------------------------- |
1352 //---------------------------------------------------------------------------- |
1334 // CMmSmsTsy::NackSmsStored |
1353 // CMmSmsTsy::NackSmsStored |
1462 EMultimodeSmsNackStored ); |
1481 EMultimodeSmsNackStored ); |
1463 if ( reqHandle ) |
1482 if ( reqHandle ) |
1464 { |
1483 { |
1465 ReqCompleted( reqHandle, aError ); |
1484 ReqCompleted( reqHandle, aError ); |
1466 } |
1485 } |
|
1486 |
|
1487 if (aError != KErrNone) |
|
1488 { |
|
1489 // Nack error from LTSY. Need to reject receive messege request, to force the client to repost it. |
|
1490 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(EMultimodeSmsReceiveMessage); |
|
1491 if( reqHandle != 0 ) |
|
1492 { |
|
1493 ReqCompleted(reqHandle, KErrGeneral); |
|
1494 } |
|
1495 iServerRoutingActivity = ERoutingNotActivated; |
|
1496 } |
1467 } |
1497 } |
1468 |
1498 |
1469 //---------------------------------------------------------------------------- |
1499 //---------------------------------------------------------------------------- |
1470 // CMmSmsTsy::ResumeSmsReception |
1500 // CMmSmsTsy::ResumeSmsReception |
1471 // Notify SMS Server, that client have again free memory for incoming SMSes |
1501 // Notify SMS Server, that client have again free memory for incoming SMSes |
2785 TInt timeOut( 0 ); |
2815 TInt timeOut( 0 ); |
2786 |
2816 |
2787 switch ( aReqHandleType ) |
2817 switch ( aReqHandleType ) |
2788 { |
2818 { |
2789 // SMS specific requests |
2819 // SMS specific requests |
2790 case EMultimodeSmsSetReceiveMode: |
|
2791 timeOut = KMmSmsSetReceiveMode; |
|
2792 break; |
|
2793 case EMultimodeSmsAckStored: |
2820 case EMultimodeSmsAckStored: |
2794 case EMultimodeSmsNackStored: |
2821 case EMultimodeSmsNackStored: |
2795 timeOut = KMmSmsAckNackMessage; |
2822 timeOut = KMmSmsAckNackMessage; |
2796 break; |
2823 break; |
2797 case EMultimodeSmsSendMessage: |
2824 case EMultimodeSmsSendMessage: |