diff -r 942573423a60 -r fa67e03b87df adaptationlayer/tsy/nokiatsy_dll/src/cmmsupplservmesshandler.cpp --- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmsupplservmesshandler.cpp Fri Jan 22 10:04:04 2010 +0200 +++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmsupplservmesshandler.cpp Wed Feb 17 13:58:55 2010 +0200 @@ -607,8 +607,9 @@ // FDN check should not be done for SAT originated requests iFdnCheck = EFalse; - // In this case also resource control is suppressed. - iResourceControlSuppress = ETrue; + // Let's check is resource control suppress needed. This info is set + // by simatktsy when extFuncL is called with IPC ESatNotifySendSsPCmd + aDataPackage->UnPackData ( iResourceControlSuppress ); break; } @@ -1605,8 +1606,10 @@ { //If cause value is KSsGsmSsNotAvailable (comes in SS_OTHER_ERROR sub block) //this indicates that there is not network coverage. - if( SS_GSM_SS_NOT_AVAILABLE == aIsiMessage.Get8bit( - sbStartOffset + SS_OTHER_ERROR_OFFSET_ERRORCODE ) ) + TUint8 errorCode( aIsiMessage.Get8bit( + sbStartOffset + SS_OTHER_ERROR_OFFSET_ERRORCODE ) ); + + if( SS_GSM_SS_NOT_AVAILABLE == errorCode ) { errorToClient = CMmStaticUtility::EpocErrorCode( KErrCouldNotConnect, @@ -1615,6 +1618,38 @@ Cause: KSsGsmSsNotAvailable => No network coverage." ); OstTrace0( TRACE_NORMAL, DUP2_CMMSUPPLSERVMESSHANDLER_SSSERVICEFAILEDRESP, "CMmSupplServMessHandler::SsServiceFailedResp, Cause: KSsGsmSsNotAvailable => No network coverage" ); } + else 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]; + errorToClient = CMmStaticUtility::MapSw1Sw2ToEpocError( + sw1, + sw2, + result ); + } + else + { + errorToClient = CMmStaticUtility::CSCauseToEpocError( + PN_SS, + subBlockId, + errorCode ); + } + } else { // Translate error to epoc world