adaptationlayer/tsy/nokiatsy_dll/src/cmmussdmesshandler.cpp
changeset 8 6295dc2169f3
parent 7 fa67e03b87df
child 9 8486d82aef45
--- 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;