satengine/satserver/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp
changeset 48 78df25012fda
parent 33 8d5d7fcf9b59
child 51 12bc758d6a02
--- a/satengine/satserver/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp	Fri Sep 03 13:59:20 2010 +0300
+++ b/satengine/satserver/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp	Fri Sep 17 17:09:13 2010 +0300
@@ -17,12 +17,16 @@
 
 
 #include    <cphcltussdsatclient.h>
-#include	<cphcltussd.h>
+#include    <cphcltussd.h>
 #include    <exterror.h>
+#include    <centralrepository.h>
+#include    <SATPrivateCRKeys.h>
+#include    <hbdevicemessageboxsymbian.h>
 
 #include    "MSatSystemState.h"
 #include    "MSatApi.h"
 #include    "MSatUtils.h"
+#include    "msatmultimodeapi.h"
 #include    "MSatUiSession.h"
 #include    "SatSOpcodes.h"
 #include    "MSatSUiClientHandler.h"
@@ -30,13 +34,11 @@
 #include    "TSatExtErrorUtils.h"
 #include    "SatLog.h"
 
-const TUint8 KQuarterShift( 2 );
-const TUint8 KHighNibbleShift( 4 );
-const TUint8 KDcsCharacterSet7Bit( 0x00 );
-const TUint8 KDcsCharacterSet8Bit( 0x01 );
-const TUint8 KDcsCharacterSet16Bit( 0x02 );
-const TUint8 KDcsCharacterSet7Bit2( 0x00 );
-const TUint8 KDcsCharacterSet16Bit2( 0x01 );
+ /** 
+  * USSD messages coded as a packed string within 160 octets, as defined for a 
+  * ussd-String within GSM 04.80 and GSM 03.38. if the Dcs is 7 bit, a ussd 
+  * string can have 182 charactor
+  */
 const TInt   KSatMaxUSSDString( 182 );
 
 // USSD DCS coding.
@@ -309,7 +311,8 @@
             {
             LOG( SIMPLE, "SENDUSSD:  dataValid true" )
             // Validate Data Coding Scheme.
-            dataValid = DcsValid( iSendUssdData.iUssdString.iDcs );
+            dataValid = iUtils->MultiModeApi().IsValidUssdDcs(
+                iSendUssdData.iUssdString.iDcs );
             if ( !dataValid )
                 {
                 LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::CommandAllowed Dcs \
@@ -564,10 +567,17 @@
     iNotificationRsp(),
     iNotificationRspPckg( iNotificationRsp ),
     // To be removed when icons are allowed in this command
-    iIconCommand( EFalse )
+    iIconCommand( EFalse ),
+    iIsSatDisplayUssdResult( EFalse )
     {
     LOG( SIMPLE,
-        "SENDUSSD: CSendUssdHandler::CSendUssdHandler calling - exiting" )
+        "SENDUSSD: CSendUssdHandler::CSendUssdHandler calling" )
+    TRAPD( result, iIsSatDisplayUssdResult = SatDisplayUssdResultL(); )
+    LOG2( NORMAL, "SENDUSSD: CSendUssdHandler::CSendUssdHandler \
+            get CRepository key failed result: %d", result )
+
+    LOG( SIMPLE,
+        "SENDUSSD: CSendUssdHandler::CSendUssdHandler exiting" )
     }
 
 
@@ -595,6 +605,15 @@
 
     iSendUssdRsp.iUssdString.iUssdString.Copy( receiveMessage );
 
+    if ( ( RSat::EAlphaIdProvided != iSendUssdData.iAlphaId.iStatus )
+        && iIsSatDisplayUssdResult )
+        {
+        // if no Alpha ID provided, show the text note.
+        LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SendUssdString Show Note" )
+        TRAP_IGNORE(
+        ShowUssdResponseNoteL( iSendUssdRsp.iUssdString.iUssdString ) );
+        }
+
     HandleSendUssdResult( error );
 
     LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SendUssdString exiting" )
@@ -671,6 +690,23 @@
     }
     
 // -----------------------------------------------------------------------------
+// Show the ussd response note.
+// -----------------------------------------------------------------------------
+//
+void CSendUssdHandler::ShowUssdResponseNoteL( const TDesC& aText )
+    {
+    LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::ShowUssdResponseNoteL calling" )
+    CHbDeviceMessageBoxSymbian::InformationL( aText );
+
+    CHbDeviceMessageBoxSymbian* messageNote = CHbDeviceMessageBoxSymbian::NewL();
+    CleanupStack::PushL( messageNote );
+    messageNote->SetButton( CHbDeviceMessageBoxSymbian::ERejectButton, EFalse );
+    CleanupStack::PopAndDestroy(); // messageNote
+
+    LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::ShowUssdResponseNoteL exiting" )
+    }
+    
+// -----------------------------------------------------------------------------
 // Handles the result of Ussd sending.
 // -----------------------------------------------------------------------------
 //
@@ -902,71 +938,6 @@
     LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SendTerminalResponse exiting" )
     }
 
-// -----------------------------------------------------------------------------
-// Check validity of a given Data Coding Cheme (Dcs).
-// -----------------------------------------------------------------------------
-//
-TBool CSendUssdHandler::DcsValid( const TUint8 aDcs ) const
-    {
-    LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::DcsValid calling" )
-
-    TBool isDcsValid( EFalse );
-                                                               //      76543210
-    TUint8 codingGroup  = ( aDcs & 0xF0 ) >> KHighNibbleShift; // bits XXXX____
-    TUint8 characterSet = ( aDcs & 0x0C ) >> KQuarterShift;    // bits ____XX__
-    TUint8 lowQuartet   = ( aDcs & 0x0F );                     // bits ____XXXX
-    LOG2( SIMPLE, 
-    "SENDUSSD: CSendUssdHandler::DcsValid codingGroup: %x", codingGroup)
-    switch ( codingGroup )
-        {
-        case 0x00:
-        case 0x02:
-        case 0x03:
-        case 0x0F:
-            {
-            isDcsValid = ETrue;
-            break;
-            }
-
-        case 0x01:
-            {
-            if ( ( KDcsCharacterSet7Bit2 == lowQuartet ) ||
-                 ( KDcsCharacterSet16Bit2 == lowQuartet ) )
-                {
-                LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::DcsValid valid" )
-                isDcsValid = ETrue;
-                }
-            break;
-            }
-
-        case 0x04:
-        case 0x05:
-        case 0x06:
-        case 0x07:
-        case 0x09:
-            {
-            if ( ( KDcsCharacterSet7Bit == characterSet ) ||
-                 ( KDcsCharacterSet8Bit == characterSet ) ||
-                 ( KDcsCharacterSet16Bit == characterSet ) )
-                {
-                LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::DcsValid isDcsValid" )
-                isDcsValid = ETrue;
-                }
-            break;
-            }
-
-        default:
-            {
-            LOG2( SIMPLE, "SENDUSSD:   Reserved Dcs found: %x", aDcs )
-            }
-        }
-
-    LOG2(
-        SIMPLE,
-        "SENDUSSD: CSendUssdHandler::DcsValid exiting, valid = %d",
-        isDcsValid )
-    return isDcsValid;
-    }
 
 // -----------------------------------------------------------------------------
 // USSD sending should be transparent if alpha identifier is provided but it's
@@ -1002,3 +973,32 @@
     return result;
     }
 
+// -----------------------------------------------------------------------------
+// Check whether the ussd sending result is displayed
+// -----------------------------------------------------------------------------
+//
+TInt CSendUssdHandler::SatDisplayUssdResultL()
+    {
+    LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SatDisplayUssdResultL calling" )
+    TInt result( KErrNone );
+    TInt ussdDisplayResult( KErrNone );
+
+    CRepository* repository = NULL;
+    repository = CRepository::NewL( KCRUidSatServer );
+    
+    if ( repository )
+        {
+        result = repository->Get( KSatDisplayUssdResult, ussdDisplayResult );
+        LOG3( NORMAL,
+        "SENDUSSD: CSendUssdHandler::CSendUssdHandler \
+        get CRepository key DisplayResult: %d, result: %d ", 
+        ussdDisplayResult, result )
+        }
+
+    delete repository;
+    repository = NULL;
+    
+    LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SatDisplayUssdResultL exiting" )
+    return ussdDisplayResult;
+    }
+