239 { |
239 { |
240 switch ( msgAttr.iType ) |
240 switch ( msgAttr.iType ) |
241 { |
241 { |
242 // User has requested to send MO USSD |
242 // User has requested to send MO USSD |
243 case RMobileUssdMessaging::EUssdMORequest: |
243 case RMobileUssdMessaging::EUssdMORequest: |
|
244 case RMobileUssdMessaging::EUssdMOReply: |
|
245 { |
244 ussdType = SS_GSM_USSD_COMMAND; |
246 ussdType = SS_GSM_USSD_COMMAND; |
245 break; |
247 break; |
246 // User is replying to MT USSD. |
248 } |
247 case RMobileUssdMessaging::EUssdMOReply: |
|
248 ussdType = SS_GSM_USSD_MT_REPLY; |
|
249 break; |
|
250 // User is signing for the MT request |
249 // User is signing for the MT request |
251 case RMobileUssdMessaging::EUssdMOAcknowledgement: |
250 case RMobileUssdMessaging::EUssdMOAcknowledgement: |
|
251 { |
252 ussdType = SS_GSM_USSD_NOTIFY; |
252 ussdType = SS_GSM_USSD_NOTIFY; |
253 break; |
253 break; |
|
254 } |
254 // Unknown or illegal cases return error to client |
255 // Unknown or illegal cases return error to client |
255 default: |
256 default: |
|
257 { |
256 // ussd type is unknown, report error |
258 // ussd type is unknown, report error |
257 ret = KErrArgument; |
259 ret = KErrArgument; |
258 break; |
260 break; |
|
261 } |
259 } |
262 } |
260 } |
263 } |
261 else |
264 else |
262 { |
265 { |
263 TFLOGSTRING("TSY: CMmUssdMessHandler::SsGsmUssdSendReq. Type flag missing" ); |
266 TFLOGSTRING("TSY: CMmUssdMessHandler::SsGsmUssdSendReq. Type flag missing" ); |
506 // If no sub block, set epocerror to KErrGeneral. |
509 // If no sub block, set epocerror to KErrGeneral. |
507 TInt epocError( KErrGeneral ); |
510 TInt epocError( KErrGeneral ); |
508 |
511 |
509 // offset where the subblock starts |
512 // offset where the subblock starts |
510 TUint sbStartOffset( KErrNone ); |
513 TUint sbStartOffset( KErrNone ); |
|
514 TBool errorMappingNeeded( ETrue ); |
511 |
515 |
512 //create package. |
516 //create package. |
513 CMmDataPackage package; |
517 CMmDataPackage package; |
514 |
518 |
515 if( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
519 if( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
547 ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP, |
551 ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP, |
548 SS_OTHER_ERROR, |
552 SS_OTHER_ERROR, |
549 EIsiSubBlockTypeId8Len8, |
553 EIsiSubBlockTypeId8Len8, |
550 sbStartOffset ) ) |
554 sbStartOffset ) ) |
551 { |
555 { |
552 causeType = SS_OTHER_ERROR; |
556 TUint8 errorCode( aIsiMessage.Get8bit( |
553 causeValue = aIsiMessage.Get8bit( |
557 sbStartOffset + SS_OTHER_ERROR_OFFSET_ERRORCODE ) ); |
554 sbStartOffset + SS_OTHER_ERROR_OFFSET_ERRORCODE ); |
558 |
|
559 if( SS_RESOURCE_CONTROL_DENIED == errorCode ) |
|
560 { |
|
561 if ( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
|
562 ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP, |
|
563 SS_SB_RESOURCE_CONTROL_INFO, |
|
564 EIsiSubBlockTypeId8Len8, |
|
565 sbStartOffset ) ) |
|
566 { |
|
567 TUint8 dataLen( aIsiMessage.Get8bit( |
|
568 sbStartOffset + SS_SB_RESOURCE_CONTROL_INFO_OFFSET_DATALENGTH ) ); |
|
569 |
|
570 TPtrC8 data( aIsiMessage.GetData( |
|
571 sbStartOffset + SS_SB_RESOURCE_CONTROL_INFO_OFFSET_DATA, |
|
572 dataLen ) ); |
|
573 // sw1, sw2 and result is inserted to SS_SB_RESOURCE_CONTROL_INFO |
|
574 // by simatktsy and ther order from first byte is: sw1, sw2 and result |
|
575 TUint8 sw1 = data[KSw1Index]; |
|
576 TUint8 sw2 = data[KSw2Index]; |
|
577 TUint8 result = data[KResultIndex]; |
|
578 epocError = CMmStaticUtility::MapSw1Sw2ToEpocError( |
|
579 sw1, |
|
580 sw2, |
|
581 result ); |
|
582 errorMappingNeeded = EFalse; |
|
583 } |
|
584 } |
|
585 else |
|
586 { |
|
587 causeType = SS_OTHER_ERROR; |
|
588 causeValue = errorCode; |
|
589 } |
555 } |
590 } |
556 else if( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
591 else if( KErrNone == aIsiMessage.FindSubBlockOffsetById( |
557 ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP, |
592 ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP, |
558 SS_GSM_MM_RELEASED, |
593 SS_GSM_MM_RELEASED, |
559 EIsiSubBlockTypeId8Len8, |
594 EIsiSubBlockTypeId8Len8, |
578 TFLOGSTRING("TSY: CMmUssdMessHandler::SsServiceFailedResp. Cause: SS_GSM_SS_NOT_AVAILABLE => No network coverage." ); |
613 TFLOGSTRING("TSY: CMmUssdMessHandler::SsServiceFailedResp. Cause: SS_GSM_SS_NOT_AVAILABLE => No network coverage." ); |
579 OstTrace0( TRACE_NORMAL, DUP1_CMMUSSDMESSHANDLER_SSSERVICEFAILEDRESP, "CMmUssdMessHandler::SsServiceFailedResp, Cause: SS_GSM_SS_NOT_AVAILABLE => No network coverage" ); |
614 OstTrace0( TRACE_NORMAL, DUP1_CMMUSSDMESSHANDLER_SSSERVICEFAILEDRESP, "CMmUssdMessHandler::SsServiceFailedResp, Cause: SS_GSM_SS_NOT_AVAILABLE => No network coverage" ); |
580 } |
615 } |
581 else |
616 else |
582 { |
617 { |
583 // Translate error to epoc world, Fix RFState problem |
618 if( errorMappingNeeded ) |
584 epocError = CMmStaticUtility::CSCauseToEpocError( |
619 { |
585 PN_SS, |
620 // Translate error to epoc world, Fix RFState problem |
586 causeType, |
621 epocError = CMmStaticUtility::CSCauseToEpocError( |
587 causeValue ); |
622 PN_SS, |
|
623 causeType, |
|
624 causeValue ); |
|
625 } |
588 } |
626 } |
589 |
627 |
590 if ( iIsSendReleaseCalled ) |
628 if ( iIsSendReleaseCalled ) |
591 { |
629 { |
592 TFLOGSTRING("TSY: CMmUssdMessHandler::SsServiceFailedResp. SendRelease failed." ); |
630 TFLOGSTRING("TSY: CMmUssdMessHandler::SsServiceFailedResp. SendRelease failed." ); |