--- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmussdmesshandler.cpp Fri Jan 22 10:04:04 2010 +0200
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmussdmesshandler.cpp Wed Feb 17 13:58:55 2010 +0200
@@ -241,21 +241,24 @@
{
// User has requested to send MO USSD
case RMobileUssdMessaging::EUssdMORequest:
+ case RMobileUssdMessaging::EUssdMOReply:
+ {
ussdType = SS_GSM_USSD_COMMAND;
break;
- // User is replying to MT USSD.
- case RMobileUssdMessaging::EUssdMOReply:
- ussdType = SS_GSM_USSD_MT_REPLY;
- break;
+ }
// User is signing for the MT request
case RMobileUssdMessaging::EUssdMOAcknowledgement:
+ {
ussdType = SS_GSM_USSD_NOTIFY;
break;
+ }
// Unknown or illegal cases return error to client
default:
+ {
// ussd type is unknown, report error
ret = KErrArgument;
break;
+ }
}
}
else
@@ -508,6 +511,7 @@
// offset where the subblock starts
TUint sbStartOffset( KErrNone );
+ TBool errorMappingNeeded( ETrue );
//create package.
CMmDataPackage package;
@@ -549,9 +553,40 @@
EIsiSubBlockTypeId8Len8,
sbStartOffset ) )
{
- causeType = SS_OTHER_ERROR;
- causeValue = aIsiMessage.Get8bit(
- sbStartOffset + SS_OTHER_ERROR_OFFSET_ERRORCODE );
+ TUint8 errorCode( aIsiMessage.Get8bit(
+ sbStartOffset + SS_OTHER_ERROR_OFFSET_ERRORCODE ) );
+
+ if( SS_RESOURCE_CONTROL_DENIED == errorCode )
+ {
+ if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
+ ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP,
+ SS_SB_RESOURCE_CONTROL_INFO,
+ EIsiSubBlockTypeId8Len8,
+ sbStartOffset ) )
+ {
+ TUint8 dataLen( aIsiMessage.Get8bit(
+ sbStartOffset + SS_SB_RESOURCE_CONTROL_INFO_OFFSET_DATALENGTH ) );
+
+ TPtrC8 data( aIsiMessage.GetData(
+ sbStartOffset + SS_SB_RESOURCE_CONTROL_INFO_OFFSET_DATA,
+ dataLen ) );
+ // sw1, sw2 and result is inserted to SS_SB_RESOURCE_CONTROL_INFO
+ // by simatktsy and ther order from first byte is: sw1, sw2 and result
+ TUint8 sw1 = data[KSw1Index];
+ TUint8 sw2 = data[KSw2Index];
+ TUint8 result = data[KResultIndex];
+ epocError = CMmStaticUtility::MapSw1Sw2ToEpocError(
+ sw1,
+ sw2,
+ result );
+ errorMappingNeeded = EFalse;
+ }
+ }
+ else
+ {
+ causeType = SS_OTHER_ERROR;
+ causeValue = errorCode;
+ }
}
else if( KErrNone == aIsiMessage.FindSubBlockOffsetById(
ISI_HEADER_SIZE + SIZE_SS_SERVICE_FAILED_RESP,
@@ -580,11 +615,14 @@
}
else
{
- // Translate error to epoc world, Fix RFState problem
- epocError = CMmStaticUtility::CSCauseToEpocError(
- PN_SS,
- causeType,
- causeValue );
+ if( errorMappingNeeded )
+ {
+ // Translate error to epoc world, Fix RFState problem
+ epocError = CMmStaticUtility::CSCauseToEpocError(
+ PN_SS,
+ causeType,
+ causeValue );
+ }
}
if ( iIsSendReleaseCalled )