diff -r fa67e03b87df -r 6295dc2169f3 adaptationlayer/tsy/nokiatsy_dll/src/cmmussdmesshandler.cpp --- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmussdmesshandler.cpp Wed Feb 17 13:58:55 2010 +0200 +++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmussdmesshandler.cpp Wed Apr 21 14:29:55 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of the License "Eclipse Public License v1.0" @@ -11,12 +11,10 @@ * * Contributors: * -* Description: +* Description: * */ - - // Include Files #include @@ -113,6 +111,8 @@ iIsSendReleaseReqPending = EFalse; iNoFdnUSSDReq = EFalse; + + iLastMtUssdIsRequest = EFalse; } // ----------------------------------------------------------------------------- @@ -221,7 +221,7 @@ TInt ret ( KErrNone ); TBuf8 data( 0 ); TDes8* attributes( 0 ); - TUint8 numOfSubblocks( 2 ); + TUint8 numOfSubblocks( 0 ); aDataPackage->UnPackData( data, attributes ); @@ -241,9 +241,24 @@ { // User has requested to send MO USSD case RMobileUssdMessaging::EUssdMORequest: + { + ussdType = SS_GSM_USSD_COMMAND; + break; + } case RMobileUssdMessaging::EUssdMOReply: { - ussdType = SS_GSM_USSD_COMMAND; +TFLOGSTRING2("TSY: CMmUssdMessHandler::SsGsmUssdSendReq; iLastMtUssdIsRequest = %d", iLastMtUssdIsRequest); +OstTrace1( TRACE_NORMAL, DUP5_CMMUSSDMESSHANDLER_SSGSMUSSDSENDREQ, "CMmUssdMessHandler::SsGsmUssdSendReq;iLastMtUssdIsRequest=%d", iLastMtUssdIsRequest ); + if ( iLastMtUssdIsRequest ) + { + ussdType = SS_GSM_USSD_MT_REPLY; + } + else + { + ussdType = SS_GSM_USSD_COMMAND; + } + // no need to reset the field, because MT USSD indication + // will always precede this kind of response break; } // User is signing for the MT request @@ -303,50 +318,55 @@ ssGsmUssdSendReq.Set8bit( ISI_HEADER_SIZE + SS_GSM_USSD_SEND_REQ_OFFSET_USSDTYPE, ussdType ); - // Create SsGsmUssdString subblock. - // subblock header + ussd string length subblock max length = 164 - - TBuf8 ssGsmUssdStringSb( 0 ); - - TIsiSubBlock subblockSSGsmUssdString( - ssGsmUssdStringSb, SS_GSM_USSD_STRING, EIsiSubBlockTypeId8Len8 ); + if ( SS_GSM_USSD_NOTIFY != ussdType ) + { + // Create SsGsmUssdString subblock. + // subblock header + ussd string length subblock max length = 164 + TBuf8 ssGsmUssdStringSb( 0 ); + TIsiSubBlock subblockSSGsmUssdString( + ssGsmUssdStringSb, SS_GSM_USSD_STRING, EIsiSubBlockTypeId8Len8 ); - ssGsmUssdStringSb.Append( codingInfo ); - ssGsmUssdStringSb.Append( data.Length() ); - ssGsmUssdStringSb.Append( data ); + ssGsmUssdStringSb.Append( codingInfo ); + ssGsmUssdStringSb.Append( data.Length() ); + ssGsmUssdStringSb.Append( data ); - ssGsmUssdSendReq.CopyData( ISI_HEADER_SIZE + - SIZE_SS_GSM_USSD_SEND_REQ, - subblockSSGsmUssdString.CompleteSubBlock() ); + ssGsmUssdSendReq.CopyData( ISI_HEADER_SIZE + + SIZE_SS_GSM_USSD_SEND_REQ, + subblockSSGsmUssdString.CompleteSubBlock() ); + numOfSubblocks++; - // create subblock SS_SB_CHECK_INFO - TBuf8sbData( 0 ); - TIsiSubBlock ssCheckInfoSb( - sbData, - SS_SB_CHECK_INFO, - EIsiSubBlockTypeId8Len8 ); + if ( SS_GSM_USSD_COMMAND == ussdType ) + { + // create subblock SS_SB_CHECK_INFO + TBuf8sbData( 0 ); + TIsiSubBlock ssCheckInfoSb( + sbData, + SS_SB_CHECK_INFO, + EIsiSubBlockTypeId8Len8 ); - if( iNoFdnUSSDReq ) - { - sbData.Append( SS_FDN_CHECK_SUPPRESS ); + if( iNoFdnUSSDReq ) + { + sbData.Append( SS_FDN_CHECK_SUPPRESS ); + } + else + { + sbData.Append( SS_NO_FDN_CHECK_SUPPRESS ); + } + + sbData.Append( SS_NO_RESOURCE_CONTROL_SUPPRESS ); + + // add the SIZE_SS_SB_CHECK_INFO subblock to service req + ssGsmUssdSendReq.CopyData( + ISI_HEADER_SIZE + SIZE_SS_GSM_USSD_SEND_REQ + + ssGsmUssdStringSb.Length(), + ssCheckInfoSb.CompleteSubBlock( ) ); + numOfSubblocks++; + } } - else - { - sbData.Append( SS_NO_FDN_CHECK_SUPPRESS ); - } - - sbData.Append( SS_NO_RESOURCE_CONTROL_SUPPRESS ); - - // add the SIZE_SS_SB_CHECK_INFO subblock to service req - ssGsmUssdSendReq.CopyData( - ISI_HEADER_SIZE + SIZE_SS_GSM_USSD_SEND_REQ + - ssGsmUssdStringSb.Length(), - ssCheckInfoSb.CompleteSubBlock( ) ); ssGsmUssdSendReq.Set8bit( ISI_HEADER_SIZE + SS_GSM_USSD_SEND_REQ_OFFSET_SUBBLOCKCOUNT, numOfSubblocks ); - //send message via phonet ret = iPhoNetSender->Send( ssGsmUssdSendReq.Complete() ); } @@ -575,9 +595,9 @@ TUint8 sw1 = data[KSw1Index]; TUint8 sw2 = data[KSw2Index]; TUint8 result = data[KResultIndex]; - epocError = CMmStaticUtility::MapSw1Sw2ToEpocError( - sw1, - sw2, + epocError = CMmStaticUtility::MapSw1Sw2ToEpocError( + sw1, + sw2, result ); errorMappingNeeded = EFalse; } @@ -739,6 +759,9 @@ case SS_GSM_USSD_REQUEST: case SS_GSM_USSD_COMMAND: { + iLastMtUssdIsRequest = SS_GSM_USSD_REQUEST == ussdType; +TFLOGSTRING2("TSY: CMmUssdMessHandler::SsGsmUssdSendReq; iLastMtUssdIsRequest = %d", iLastMtUssdIsRequest); +OstTrace1( TRACE_NORMAL, DUP3_CMMUSSDMESSHANDLER_SSGSMUSSDRECEIVEIND, "CMmUssdMessHandler::SsGsmUssdReceiveInd;iLastMtUssdIsRequest=%d", iLastMtUssdIsRequest ); receiveUssdMessageAttributes.iType = RMobileUssdMessaging::EUssdMTRequest; break;