--- 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 <ctsy/pluginapi/cmmdatapackage.h>
@@ -113,6 +111,8 @@
iIsSendReleaseReqPending = EFalse;
iNoFdnUSSDReq = EFalse;
+
+ iLastMtUssdIsRequest = EFalse;
}
// -----------------------------------------------------------------------------
@@ -221,7 +221,7 @@
TInt ret ( KErrNone );
TBuf8<RMobileUssdMessaging::KGsmUssdDataSize> 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<KMaxLengthOfUssdMessage + 3> 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<KMaxLengthOfUssdMessage + 3> 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
- TBuf8<SIZE_SS_SB_CHECK_INFO>sbData( 0 );
- TIsiSubBlock ssCheckInfoSb(
- sbData,
- SS_SB_CHECK_INFO,
- EIsiSubBlockTypeId8Len8 );
+ if ( SS_GSM_USSD_COMMAND == ussdType )
+ {
+ // create subblock SS_SB_CHECK_INFO
+ TBuf8<SIZE_SS_SB_CHECK_INFO>sbData( 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;