Revision: 201031 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:28:14 +0300
branchRCL_3
changeset 41 594d59766373
parent 40 c58fd5f0c240
child 43 7d48bed6ce0c
Revision: 201031 Kit: 201033
cbs/cbsui/UiInc/CCbsUiAddFromIndexDialog.h
cellular/PsetNotesUi/Src/PsuiQueryDialog.cpp
cellular/SSSettings/inc/CSSSettingsRefreshHandler.h
cellular/SSSettings/src/CSSSettingsRefreshHandler.cpp
cellular/telephonysettings/src/PsetNetwork.cpp
convergedcallengine/csplugin/src/cspcall.cpp
phoneclientserver/EnPolicy/Src/SosEnPolicy/CSosEnPolicySatRefresh.cpp
phoneclientserver/phoneserver/Group/PhoneServer.mmp
phoneclientserver/phoneserver/Group/bld.inf
phoneclientserver/phoneserver/Inc/Ussd/CPhSrvUssdManager.h
phoneclientserver/phoneserver/Inc/Ussd/CUssdExtensionInterface.h
phoneclientserver/phoneserver/Inc/Ussd/CUssdExtensionInterface.inl
phoneclientserver/phoneserver/Inc/Ussd/ussdinterfaceconstants.hrh
phoneclientserver/phoneserver/Src/Ussd/CPhSrvUssdManager.cpp
phonecmdhandler/phonecmdhnlr/src/PhoneHandlerCallArray.cpp
phonesrv_plat/call_information_api/tsrc/run_auto_tests.bat
phonesrv_plat/converged_call_engine_api/inc/ccce.h
phonesrv_plat/voice_mailbox_number_api/inc/vmnumber.h
satengine/SatServer/Commands/RefreshRequiredCmd/inc/CRefreshRequiredHandler.h
satengine/SatServer/Commands/RefreshRequiredCmd/src/CRefreshRequiredHandler.cpp
satengine/SatServer/Commands/SendUSSDCmd/group/SendUssdCmd.mmp
satengine/SatServer/Commands/SendUSSDCmd/inc/CSendUssdHandler.h
satengine/SatServer/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp
satengine/SatServer/Engine/inc/CSatApnHandler.h
satengine/SatServer/Engine/inc/csatmultimodeapi.h
satengine/SatServer/Engine/src/CSatApnHandler.cpp
satengine/SatServer/Engine/src/csatmultimodeapi.cpp
satengine/SatServer/conf/sat.confml
satengine/SatServer/conf/sat_102078E1.crml
satengine/SatServer/inc/SATPrivateCRKeys.h
satengine/SatServer/inc/msatmultimodeapi.h
satui/satapp/SATUIInc/CSatUiViewAppUi.h
satui/satapp/SATUISrc/CSatUiViewAppUi.cpp
satui/satplugin/aisatplugininc/caisatengine.h
satui/satplugin/aisatpluginsrc/caisatnotifier.cpp
--- a/cbs/cbsui/UiInc/CCbsUiAddFromIndexDialog.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/cbs/cbsui/UiInc/CCbsUiAddFromIndexDialog.h	Thu Aug 19 10:28:14 2010 +0300
@@ -23,7 +23,7 @@
 #define __CCBSADDFROMINDEXDIALOG_H
 
 // INCLUDES
-#include <akndialog.h>
+#include <AknDialog.h>
 #include <CbsCommon.h>
 #include "CbsUiConstants.h"
  
--- a/cellular/PsetNotesUi/Src/PsuiQueryDialog.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/cellular/PsetNotesUi/Src/PsuiQueryDialog.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -53,11 +53,18 @@
 TKeyResponse CPsuiQueryDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,
     TEventCode aType )
     {
-	if ( ( aKeyEvent.iScanCode == EStdKeyNo || aKeyEvent.iCode == EKeyNo  ) &&
-		 aType == EEventKeyUp )
+    const TBool noKeyReleased = 
+        ( aKeyEvent.iScanCode == EStdKeyNo || aKeyEvent.iCode == EKeyNo  ) &&
+          aType == EEventKeyUp;    
+    const TBool escPressed = aKeyEvent.iCode == EKeyEscape;
+    
+    // AknDialogShutter sends esc keys so dismiss dialog 
+	if ( noKeyReleased || escPressed )
 		{
 		// End -key was pressed, so exit this query dialog
-		TryExitL( EKeyNo );
+		TryExitL( EKeyNo ); 
+		RDebug::Printf("PSETNOTESUI: exiting dialog");
+		return EKeyWasConsumed;
 		}
 
 	return EKeyWasNotConsumed;
--- a/cellular/SSSettings/inc/CSSSettingsRefreshHandler.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/cellular/SSSettings/inc/CSSSettingsRefreshHandler.h	Thu Aug 19 10:28:14 2010 +0300
@@ -27,8 +27,8 @@
 #include <MSSSettingsRefreshObserver.h>
 #include <RSSSettings.h>
 #include <RCustomerServiceProfileCache.h>
-#include <RSatRefresh.h>
-#include <RSatSession.h>
+#include <rsatrefresh.h>
+#include <rsatsession.h>
 #include <cenrepnotifyhandler.h>
 #include "CSSSettingsActiveObject.h"
 
--- a/cellular/SSSettings/src/CSSSettingsRefreshHandler.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/cellular/SSSettings/src/CSSSettingsRefreshHandler.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -19,7 +19,7 @@
 
 // INCLUDE FILES
 #include    <centralrepository.h>
-#include    <RSatRefresh.h>
+#include    <rsatrefresh.h>
 #include    <BTSapDomainPSKeys.h>     // BT SAP Central Repository key.
 #include    <featmgr.h>
 
--- a/cellular/telephonysettings/src/PsetNetwork.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/cellular/telephonysettings/src/PsetNetwork.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -340,6 +340,12 @@
                         {
                         iTempNetInfo.iAccess = ENetNetworkGSM;
                         }
+
+                    /** Implementation of forbidden operator icon begins */
+                    // Set network status for displaying forbidden operator icon
+                    iTempNetInfo.iStatus = static_cast<MPsetNetworkSelect::TNetworkStatus>( nwNames.iStatus );
+                    /** Implementation of forbidden operator icon ends */
+                        
                     array->AppendL( iTempNetInfo );
                     i++;       
                     }
--- a/convergedcallengine/csplugin/src/cspcall.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/convergedcallengine/csplugin/src/cspcall.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -216,6 +216,8 @@
         case RMobileCall::EStatusDialling:
             CSPLOGSTRING(CSPINT, "CSPCall callstate Dialling");
             {
+			// Start streams also for MO video call to prevent audio routing problems
+			// with other applications.
             if ( iAudioHandler 
                  && ( iParams->CallType() == CCPCall::ECallTypeCSVoice 
                     || iParams->CallType() == CCPCall::ECallTypeVideo ) )
@@ -283,6 +285,17 @@
             // Agreement with TSY is that the
             // COLP number is available in connected state.
             NotifyRemotePartyNumberChanged();            
+            
+            // Stop streams for MO video call so that Video Telephony can 
+            // receive RemCon commands instead of Phone.
+            if ( iMobileOriginated
+                && iAudioHandler 
+                && iAudioStatus == ECSPCallAudioStatusActive
+                && iParams->CallType() == CCPCall::ECallTypeVideo )
+                {
+                iAudioStatus = ECSPCallAudioStatusInactive;
+                iAudioHandler->Stop();
+                }
             break;
             }
         // Indicates that call is disconnecting. (Same as RCall::HangingUp)
--- a/phoneclientserver/EnPolicy/Src/SosEnPolicy/CSosEnPolicySatRefresh.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/phoneclientserver/EnPolicy/Src/SosEnPolicy/CSosEnPolicySatRefresh.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -23,8 +23,8 @@
 #include "CSOSEmergencyNumberPolicyHandler.h"
 #include "CSosEnPolicySatRefresh.h"
 
-#include <RSatRefresh.h>
-#include <RSatSession.h>
+#include <rsatrefresh.h>
+#include <rsatsession.h>
 
 #include  <startupdomainpskeys.h> // Property values
 
--- a/phoneclientserver/phoneserver/Group/PhoneServer.mmp	Thu Jul 15 19:16:18 2010 +0300
+++ b/phoneclientserver/phoneserver/Group/PhoneServer.mmp	Thu Aug 19 10:28:14 2010 +0300
@@ -135,5 +135,6 @@
 LIBRARY        centralrepository.lib
 LIBRARY        imageconversion.lib 	
 LIBRARY        bitmaptransforms.lib 
+LIBRARY        ecom.lib 
 
 //  End of File  
--- a/phoneclientserver/phoneserver/Group/bld.inf	Thu Jul 15 19:16:18 2010 +0300
+++ b/phoneclientserver/phoneserver/Group/bld.inf	Thu Aug 19 10:28:14 2010 +0300
@@ -21,7 +21,9 @@
 DEFAULT
 
 PRJ_EXPORTS
-
+..\inc\ussd\ussdinterfaceconstants.hrh		MW_LAYER_PLATFORM_EXPORT_PATH(ussdinterfaceconstants.hrh)
+..\inc\ussd\CUssdExtensionInterface.h		MW_LAYER_PLATFORM_EXPORT_PATH(CUssdExtensionInterface.h)
+..\inc\ussd\CUssdExtensionInterface.inl 	MW_LAYER_PLATFORM_EXPORT_PATH(CUssdExtensionInterface.inl)
 
 backup_registration.xml  z:/private/10000850/backup_registration.xml
 
--- a/phoneclientserver/phoneserver/Inc/Ussd/CPhSrvUssdManager.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/phoneclientserver/phoneserver/Inc/Ussd/CPhSrvUssdManager.h	Thu Aug 19 10:28:14 2010 +0300
@@ -38,6 +38,8 @@
 class CAknGlobalMsgQuery;
 class CPhSrvUssdSessionCancelWaiter;
 class CPhSrvUssdNotifyNWRelease;
+// RM-RIM 417-66528
+class CUssdExtensionInterface;
 
 // CLASS DECLARATION
 
@@ -214,6 +216,18 @@
             const TDes8& aMsgData, 
             const RMobileUssdMessaging::TMobileUssdAttributesV1& 
                   aMsgAttributes);
+
+        // RM-RIM 417-66528
+        /** Third stage handler for received messages meant for extension 
+        */
+        void PorcessReceivedMessageInExtesnionL(const TDes8& aMsgData, 
+                const RMobileUssdMessaging::TMobileUssdAttributesV1& 
+                      aMsgAttributes);
+        /** Third stage handler for received messages 
+        */
+        void ProcessReceivedMessageL(const TDes8& aMsgData, 
+                const RMobileUssdMessaging::TMobileUssdAttributesV1& 
+                      aMsgAttributes);
         // Restart the reply timer
         void RestartReplyTimerL();
         
@@ -223,6 +237,11 @@
         // Set timer and activate it if there are notifications available
         void SetActiveIfPendingNotificationsExist();
         
+        // RM-RIM 417-66528
+        // Create and Initialize the global message query
+        void CreateGlobalMessageQueryL( 
+                const RMobileUssdMessaging::TMobileUssdAttributesV1& 
+                      aMsgAttributes);
         // Launch the global message query (used from RunL)
         void LaunchGlobalMessageQueryL();
         
@@ -418,6 +437,10 @@
         
         // An asynchronous callback for sending MO ACK messages
         CAsyncCallBack* iMoAckCallback;
+        
+        // RM-RIM 417-66528
+        // Pointer to the UssdExtension
+        CUssdExtensionInterface* iUssdExtnInterface;
     };
     
 #endif // CPHSRVUSSDMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneclientserver/phoneserver/Inc/Ussd/CUssdExtensionInterface.h	Thu Aug 19 10:28:14 2010 +0300
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  Extends the ussd functionality.
+ *
+ */
+#ifndef __CUSSDEXTENSIONINTERFACE_H__
+#define __CUSSDEXTENSIONINTERFACE_H__
+
+// INCLUDES
+
+#include<ecom\ecom.h>
+#include<etelmm.h>
+#include<ussdinterfaceconstants.hrh>
+// FORWARD DECLARATIONS
+
+// CONSTANTS
+const TUid KUssdExtensionInterfaceUid =
+    {
+    KUssdExtensionInterfaceUidValue
+    };
+
+// CLASS DECLARATION
+
+/**
+ *  Base class for Ussd Extension Plugin.
+ *
+ *  This API allows customizing the USSD sending feature of the S60 Telephony 
+ *  applications at runtime.
+ *
+ *  The API defines two roles:
+ *  1) Validates the USSD string while sending. if it is unauthorized 
+ *  in the context shall terminate the request.
+ *  2) Validates the USSD string while receiving, the extension will get the first chance to consume the reply if needed
+ *
+ *
+ *  Note:
+ *  The customizer needs only one plug-in implementation for a variant, and so supports only rom-only plug-in.
+ */
+class CUssdExtensionInterface : public CBase
+    {
+public:
+    // Constructors and destructor
+    /**
+     * NewL
+     * Wraps ECom object instantitation. Will return the
+     * default interface implementation, which matches to
+     * given aOperationName.
+     */
+    static CUssdExtensionInterface* NewL();
+
+    /**
+     * NewL
+     * Wraps ECom object instantitation. Will search for
+     * interface implementation, which matches to given
+     * aOperationName.
+     * @param aOperationName name of requested implementation.
+     * Implementations advertise their "name" as specified
+     * in their resource file field
+     * IMPLEMENTATION_INFO::default_data.
+     */
+    static CUssdExtensionInterface* NewL(const TDesC8& aMatch);
+
+public:
+    // API to be implemented by ECOM plug-in
+
+    /**
+     * Validate/Authenticate the Ussd string Before Sending from
+     * the USSD Send handler
+     * When Ussd Extention plugin return true, then ussd manager will continue sending of the ussd
+     * Otherwise the transaction will be terminated with KErrAccessDenined 
+     *
+     * @param aMessageData  
+     * @param aMessageAttributes .
+     */
+    virtual TBool
+            ValidateUssdMsgSending(
+                    const TDesC8& aMessageData,
+                    const RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttribute) = 0;
+    /**
+     * Validate/Authenticate the Ussd response received by the 
+     * USSD receive handler
+     *
+     * @param aMessageData  
+     * @return true implies that the ussd response is valid for the extension.
+     * otherwise pass it to the observer. .
+     */
+    virtual TBool ValidateUssdResponse(const TDesC8& aMessage) = 0;
+    /**
+     * if ValidateUssdResponse returns true, then the extension plugin is waiting for the response 
+     * so invoke the interface to deligate to the plugin.
+     * Example:
+     * ...
+     *  TBool isValidForExtension = iUssdExtnInterface->ValidateUssdResponse(aMsgData);
+     *  TInt errfromextension = KErrNone;
+     *  if (isValidForExtension)
+     *     {
+     *     TRAPD(err, iUssdExtnInterface->ProcessReceivedUssdL(iDecodedMessage, errfromextension));
+     *     ...
+     *     
+     * @param aMessageData  
+     * @return error code
+     * @leave On typical leave level problems. 
+     */
+    virtual void
+            ProcessReceivedUssdL(const TDesC& aMessageData, TInt aError) = 0;
+
+    /**
+     * Notify the any network error to the extension, so that it can handle the internal states if required
+     * @param aError 
+     */
+    virtual void NotifyNWError(TInt aError)=0;
+
+public:
+    /**
+     * ~CUssdExtensionInterface
+     *
+     * Cleans up resources, specifically notify ECOM server that this
+     * instance is being deleted.
+     */
+    virtual ~CUssdExtensionInterface();
+
+private:
+    TUid iDtor_ID_Key; // Identification on cleanup
+    };
+#include "CUssdExtensionInterface.inl"    
+#endif // __CUSSDEXTENSIONINTERFACE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneclientserver/phoneserver/Inc/Ussd/CUssdExtensionInterface.inl	Thu Aug 19 10:28:14 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Interface's (abstract base class's) static factory method implementation.
+*
+*/
+
+#include <e32def.h>
+#include <ecom\ecom.h>
+
+// ---------------------------------------------------------------------------
+// CUssdExtensionInterface::NewL
+// Interface's (abstract base class's) static factory method implementation.
+// Asks ECOM plugin framework to instantiate appropriate concret plugin
+// implementation.
+// ---------------------------------------------------------------------------
+//
+inline CUssdExtensionInterface* CUssdExtensionInterface::NewL()
+    {
+    TEComResolverParams resolutionParameters;
+    resolutionParameters.SetGenericMatch(ETrue);
+    TAny* interface = REComSession::CreateImplementationL (
+            KUssdExtensionInterfaceUid, _FOFF (CUssdExtensionInterface, iDtor_ID_Key), resolutionParameters, KRomOnlyResolverUid);
+
+    return reinterpret_cast <CUssdExtensionInterface*> (interface);
+    }
+
+// ---------------------------------------------------------------------------
+// CUssdExtensionInterface::NewL
+// Interface's (abstract base class's) static factory method implementation.
+// Asks ECOM plugin framework to instantiate appropriate concret plugin
+// implementation.
+// ---------------------------------------------------------------------------
+//
+inline CUssdExtensionInterface* CUssdExtensionInterface::NewL(const TDesC8& aOperationName)
+    {
+    TEComResolverParams resolverParams;
+    resolverParams.SetDataType (aOperationName);
+    resolverParams.SetWildcardMatch (ETrue);
+
+    TAny* interface = REComSession::CreateImplementationL (KUssdExtensionInterfaceUid,
+        _FOFF (CUssdExtensionInterface, iDtor_ID_Key), resolverParams, KRomOnlyResolverUid);
+
+    return reinterpret_cast <CUssdExtensionInterface*> (interface);
+    }
+
+// ---------------------------------------------------------------------------
+// CUssdExtensionInterface::~CUssdExtensionInterface
+// Interface's (abstract base class's) destructor
+// ---------------------------------------------------------------------------
+//
+inline CUssdExtensionInterface::~CUssdExtensionInterface()
+    {
+    REComSession::DestroyedImplementation (iDtor_ID_Key);
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneclientserver/phoneserver/Inc/Ussd/ussdinterfaceconstants.hrh	Thu Aug 19 10:28:14 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  common definitions of the ussd extension.
+*
+*/
+#ifndef T_USSDINTERFACECONSTANTS_HRH
+#define T_USSDINTERFACECONSTANTS_HRH
+
+
+const TInt KUssdExtensionInterfaceUidValue = 0x200315D0; 
+
+
+#endif // T_USSDINTERFACECONSTANTS_HRH
--- a/phoneclientserver/phoneserver/Src/Ussd/CPhSrvUssdManager.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/phoneclientserver/phoneserver/Src/Ussd/CPhSrvUssdManager.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -56,6 +56,8 @@
 #include <telservicesinternalcrkeys.h>
 #include <coreapplicationuisdomainpskeys.h>
 
+//RM-RIM 417-66528
+#include <CUssdExtensionInterface.h>
 
 // CONSTANTS
 const TInt KPhSrvDefaultValue = 0x00000000;
@@ -436,6 +438,10 @@
     
     delete iMoAckCallback;
 
+    // RM-RIM 417-66528
+    delete iUssdExtnInterface;
+    iUssdExtnInterface = NULL;
+        
     _DPRINT( 4, "PhSrv.~CPhSrvUssdManager.end" );       // debug print
     }
 
@@ -492,6 +498,10 @@
 	_DDPRINT( 4, "PhSrv.ConstructL.iSatCanceled ", iSatCanceled );
     _DDPRINT( 4, "PhSrv.ConstructL.iShowDone ", iShowDone );
     iNotifyArray = new( ELeave ) CDesCArrayFlat( KPhrUssdNotifyArraySize );
+    
+    // RM-RIM 417-66528
+    TRAP_IGNORE(iUssdExtnInterface = CUssdExtensionInterface::NewL());
+    _DPRINT( 4, "PhSrv.ConstructL.iUssdExtnInterface Created");
     _DPRINT( 4, "PhSrv.ConstructL.End" );       // debug print
     }
 
@@ -550,6 +560,16 @@
     _DPRINT( 4, "PhSrv.SendUssdL.Start ######" );           // debug print
     _DPRINT_FLAGS();
     
+    //417-66528
+    if (iUssdExtnInterface)
+        {
+        if(!iUssdExtnInterface->ValidateUssdMsgSending(aMsgData,aMsgAttribute))
+            {
+            // invalid attempt to send USSD message. Show the note 
+            User::Leave( KErrAccessDenied );
+            }
+        }
+    
     if ( iObserver && iNetworkReleased ) 
         {
         // Network has been released but the previous send request is still alive.
@@ -810,6 +830,14 @@
         {
         iReceivedMessage = iDecodedMessage;
         }
+    // 4. Invoke UssdExtensionPlugin
+    // 417-66528
+    TBool isResponseValidated = EFalse;
+    if (iUssdExtnInterface)
+        {
+        _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.InvokeExtension" );
+        isResponseValidated = iUssdExtnInterface->ValidateUssdResponse(aMsgData);
+        }
     // 5. Show note.
     // debug print
     _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Note" );
@@ -824,109 +852,155 @@
             return;
             }
         }
-
+    //6. Check if the response is valid for the extension
+    //RM-RIM 417-66528
+    if (iUssdExtnInterface && isResponseValidated)
+        PorcessReceivedMessageInExtesnionL(aMsgData, aMsgAttributes);
+    else
+        ProcessReceivedMessageL(aMsgData, aMsgAttributes);
+        
+    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Editor" );
+    if (aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTRequest
+            && UssdAppTaskExistsL())
+        {
+        iEmptyEditor = ETrue;
+        } _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.End" );
+    }
+// -----------------------------------------------------------------------------
+// CPhSrvUssdManager::ProcessReceivedMessageL
+//
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPhSrvUssdManager::ProcessReceivedMessageL(const TDes8& /*aMsgData*/,
+        const RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttributes)
+    {
     // empty string is handled as ok message
-    if ( !iDecodedMessage.Length() )
+    if (!iDecodedMessage.Length())
         {
         TurnLightsOn(); //Ensure lights on
-        // debug print
-        _DPRINT( 4,
-            "PhSrv.UssdHandleReceivedEventL.EmptyString" );
-        
-        ShowDoneNoteL();
 
         // debug print
         _DPRINT( 4,
-            "PhSrv.UssdHandleReceivedEventL.EmptyString.OK" );
+                "PhSrv.UssdHandleReceivedEventL.EmptyString" );
+        ShowDoneNoteL();
+        // debug print
+        _DPRINT( 4,
+                "PhSrv.UssdHandleReceivedEventL.EmptyString.OK" );
         }
     else
         {
-       	_DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.String" );
-        iNotifyMessage = ( aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTNotify );
-        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage );
+        _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.String" );
+        iNotifyMessage = (aMsgAttributes.iType
+                == RMobileUssdMessaging::EUssdMTNotify);
+        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage ); 
         _DDPRINT( 4, "PhSrv.UssdNOHREventL.iNotifyMessage: ", iNotifyMessage );
-        iMsgTypeReply = ( aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTReply );
+        iMsgTypeReply = (aMsgAttributes.iType
+                == RMobileUssdMessaging::EUssdMTReply);
         _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iMsgTypeReply: ", iMsgTypeReply );
-        
-        if ( iNotifyMessage ) 
+
+        if (iNotifyMessage)
             {
             // need to send an MO ack
-            iAcksToBeSent ++;
-            }
-        
-        if ( iNotifyMessage || iMsgTypeReply )
-        	{
-        	//This is for reply message in notifyarray
-        	iNotifyMessage = ETrue;
-        	_DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage );
-
-	        //Notify added to array
-        	iNotifyArray->AppendL( iReceivedMessage );
-
-        	_DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.AppendL" );       // debug print
-        	UpdateNotifyMessage();
-
-        	if ( !iSendRelease && NotifyCount() <= 1 )
-				{
-				_DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.!SendRelease.Cancel" );       // debug print
-				Cancel();
-				}
-        	}
-        else
-       		{
-       		// New message deletes old message, i.e. Cancel existing query.
-       		Cancel();
-			_DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.NewAnswerable" );       // debug print
-       		}
-
-        if ( !iGlobalMsgQuery )
-            {
-            iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
+            iAcksToBeSent++;
             }
 
-        // Delay after message query so that application execution order will
-        // be correct.
-        iGlobalMsgQuery->SetExitDelay( KPhSrvUssdNoteExitPeriod );
+        if (iNotifyMessage || iMsgTypeReply)
+            {
+            //This is for reply message in notifyarray
+            iNotifyMessage = ETrue;
+            _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage );
+
+            //Notify added to array
+            iNotifyArray->AppendL(iReceivedMessage);
+
+            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.AppendL" ); // debug print
+            UpdateNotifyMessage();
 
-        TInt softkeys = R_AVKON_SOFTKEYS_USSD_ANSWER_EXIT__ANSWER;
-        if( !( aMsgAttributes.iFlags & RMobileUssdMessaging::KUssdMessageType )
-             || aMsgAttributes.iType != RMobileUssdMessaging::EUssdMTRequest )
+            if (!iSendRelease && NotifyCount() <= 1)
+                {
+                _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.!SendRelease.Cancel" ); // debug print
+                Cancel();
+                }
+            }
+        else
             {
-            softkeys = R_AVKON_SOFTKEYS_EXIT;
+            // New message deletes old message, i.e. Cancel existing query.
+            Cancel();
+            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.NewAnswerable" ); // debug print
             }
+        CreateGlobalMessageQueryL(aMsgAttributes);
+        AsyncProcessMoAcks();
+        } 
+    _DPRINT( 4, "PhSrv.ProcesdReceivedMessageL.End" );
+    }
 
-        // Set timer that lauches Global MessageQuery after time interval.
-        iSoftkeys = softkeys;
-
+// -----------------------------------------------------------------------------
+// CPhSrvUssdManager::PorcessReceivedMessageInExtesnionL
+//
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPhSrvUssdManager::PorcessReceivedMessageInExtesnionL(
+        const TDes8& /*aMsgData*/,
+        const RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttributes)
+    {
+    TInt errfromextension = KErrNone;
+    // empty string is handled as ok message
+    if (!iDecodedMessage.Length())
+        {
         // debug print
         _DPRINT( 4,
-            "PhSrv.UssdHandleReceivedEventL.String.Middle" );
+                "PhSrv.UssdHandleReceivedEventL.EmptyString" );
+        //RM-RIM 417-66528
+        TRAP_IGNORE(iUssdExtnInterface->ProcessReceivedUssdL(iDecodedMessage, errfromextension));
+        // debug print
+        _DPRINT( 4,
+                "PhSrv.UssdHandleReceivedEventL.EmptyString.OK" );
+        }
+    else
+        {
+        _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.String" );
+        iNotifyMessage = (aMsgAttributes.iType
+                == RMobileUssdMessaging::EUssdMTNotify);
+        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage ); 
+        _DDPRINT( 4, "PhSrv.UssdNOHREventL.iNotifyMessage: ", iNotifyMessage );
+        iMsgTypeReply = (aMsgAttributes.iType
+                == RMobileUssdMessaging::EUssdMTReply);
+        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iMsgTypeReply: ", iMsgTypeReply );
 
-        // Play the USSD tone if needed. Logically should be in RunL, but here
-        // to give better balancing with voice and visible message.
-        if ( IsTelephonyFeatureSupported( KTelSrvLVFlagUssdTone ) )
+        if (iNotifyMessage)
             {
-            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.PlayTone" );
-            PlayUssdTone();
+            // need to send an MO ack
+            iAcksToBeSent++;
             }
 
-        // Launch the new message query
-        if ( !IsActive() )
+        if (iNotifyMessage || iMsgTypeReply)
             {
-            iLaunchGMQ = ETrue;
-            iTimer.After( iStatus , KPhSrvUssdMessageQueryInterval );
-            SetActive();
+            //This is for reply message in notifyarray
+            iNotifyMessage = ETrue;
+            _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage );
+            if (!iSendRelease && NotifyCount() <= 1)
+                {
+                _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.!SendRelease.Cancel" ); // debug print
+                Cancel();
+                }
             }
-        AsyncProcessMoAcks();
+        else
+            {
+            // New message deletes old message, i.e. Cancel existing query.
+            Cancel();
+            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.NewAnswerable" ); // debug print
+            }
+        TInt errfromextension = KErrNone;
+        ProcessMoAcksL();
+        iLaunchGMQ = EFalse;
+        TRAP_IGNORE(iUssdExtnInterface->ProcessReceivedUssdL(iDecodedMessage, errfromextension)); 
+        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Extn.ProcessReceivedUssdL.ErrCode", errfromextension);
         }
-    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Editor" );
-    if( aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTRequest && UssdAppTaskExistsL() )
-        {
-        iEmptyEditor = ETrue;
-        }
-    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.End" );
     }
-
 // -----------------------------------------------------------------------------
 // CPhSrvUssdManager::RestartReplyTimerL
 //
@@ -996,7 +1070,12 @@
         // if we are sending ack, it can be canceled.
         iUssdSendHandler->Cancel();
         }
-    
+    //417-66528
+    //Notify Extension on NWRelease
+    if(iUssdExtnInterface)
+        {
+        iUssdExtnInterface->NotifyNWError(aError);
+        }
     iSatCanceled = EFalse;
     _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleNotifyNWReleaseL.iSatCanceled.EFalse" );
     iShowDone = EFalse;
@@ -1341,7 +1420,52 @@
         _DPRINT( 4, "PhSrv.RunL.End" );     // debug print
         }
     }
+// RM-RIM 417-66528
+// -----------------------------------------------------------------------------
+// CPhSrvUssdManager::CreateGlobalMessageQueryL
+// -----------------------------------------------------------------------------
+//
+void CPhSrvUssdManager::CreateGlobalMessageQueryL(
+        const RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttributes)
+    {
+    if (!iGlobalMsgQuery)
+        {
+        iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
+        }
 
+    // Delay after message query so that application execution order will
+    // be correct.
+    iGlobalMsgQuery->SetExitDelay(KPhSrvUssdNoteExitPeriod);
+
+    TInt softkeys = R_AVKON_SOFTKEYS_USSD_ANSWER_EXIT__ANSWER;
+    if (!(aMsgAttributes.iFlags & RMobileUssdMessaging::KUssdMessageType)
+            || aMsgAttributes.iType != RMobileUssdMessaging::EUssdMTRequest)
+        {
+        softkeys = R_AVKON_SOFTKEYS_EXIT;
+        }
+
+    // Set timer that lauches Global MessageQuery after time interval.
+    iSoftkeys = softkeys;
+
+    // debug print
+    _DPRINT( 4,
+            "PhSrv.UssdHandleReceivedEventL.String.Middle" );
+
+    // Play the USSD tone if needed. Logically should be in RunL, but here
+    // to give better balancing with voice and visible message.
+    if (IsTelephonyFeatureSupported(KTelSrvLVFlagUssdTone))
+        {
+        _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.PlayTone" );
+        PlayUssdTone();
+        }
+    // Launch the new message query
+    if (!IsActive())
+        {
+        iLaunchGMQ = ETrue;
+        iTimer.After(iStatus, KPhSrvUssdMessageQueryInterval);
+        SetActive();
+        }
+    }
 // -----------------------------------------------------------------------------
 // CPhSrvUssdManager::LaunchGlobalMessageQueryL
 // -----------------------------------------------------------------------------
--- a/phonecmdhandler/phonecmdhnlr/src/PhoneHandlerCallArray.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/phonecmdhandler/phonecmdhnlr/src/PhoneHandlerCallArray.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 #include <callinformation.h>
-#include "phonehandlercallarray.h"
+#include "PhoneHandlerCallArray.h"
 
 // ---------------------------------------------------------------------------
 // CPhoneHandlerCallArray::NewL.
--- a/phonesrv_plat/call_information_api/tsrc/run_auto_tests.bat	Thu Jul 15 19:16:18 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/run_auto_tests.bat	Thu Aug 19 10:28:14 2010 +0300
@@ -148,7 +148,7 @@
 call sbs --config winscw_udeb.test --keepgoing clean
 call sbs --config winscw_udeb.test --keepgoing reallyclean
 if [%INSTRUMENT%] EQU [TRUE] (
-call ctcwrap -2comp -n %PATH_TO_COVERAGE_DATA%\%1 -i d -C "EXCLUDE=*" -C "NO_EXCLUDE=%TESTED_SRC%" "%SBS_CALL%"
+call ctcwrap -n %PATH_TO_COVERAGE_DATA%\%1 -i d -C "EXCLUDE=*" -C "NO_EXCLUDE=%TESTED_SRC%" "%SBS_CALL%"
 ) else (
 call %SBS_CALL%
 )
@@ -188,7 +188,7 @@
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :CALCULATECOVERAGE
 echo Calculating coverage
-ctcpost %PATH_TO_COVERAGE_DATA%\*.sym | ctcmerge -i - -o profile.txt
+ctcpost -p - %PATH_TO_COVERAGE_DATA%\*.sym | ctcmerge -i - -o profile.txt
 call ctc2html -t 70 -i profile.txt -o \coverage_result -nsb
 goto end
 
--- a/phonesrv_plat/converged_call_engine_api/inc/ccce.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/phonesrv_plat/converged_call_engine_api/inc/ccce.h	Thu Aug 19 10:28:14 2010 +0300
@@ -58,7 +58,7 @@
 #ifndef RMMCUSTOMAPI_H 
 /** defenition for OG, most likely will be deprecated later on */
 ///_LIT(KTerminateAllCalls,"ALL_CALLS");
-#include <RMmCustomAPI.h> // Add reference there, cs classes need that too
+#include <rmmcustomapi.h> // Add reference there, cs classes need that too
 #endif
 
 /**
--- a/phonesrv_plat/voice_mailbox_number_api/inc/vmnumber.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/phonesrv_plat/voice_mailbox_number_api/inc/vmnumber.h	Thu Aug 19 10:28:14 2010 +0300
@@ -37,7 +37,7 @@
 #include <rsatsession.h>
 #include <rsatrefresh.h>
 #include <centralrepository.h>
-#include <CenRepNotifyHandler.h>
+#include <cenrepnotifyhandler.h>
 #include <aknappui.h>
 #include <AknQueryDialog.h>
 #include <CPhCltEmergencyCall.h>     // CPhCltEmergencyCall
--- a/satengine/SatServer/Commands/RefreshRequiredCmd/inc/CRefreshRequiredHandler.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Commands/RefreshRequiredCmd/inc/CRefreshRequiredHandler.h	Thu Aug 19 10:28:14 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -102,29 +102,6 @@
     private:
 
         /**
-        * The indicated AID may be of four states.  
-        * We treat it as the Active AID case if the indicated AID is NULL. 
-        */
-        enum TAidState
-            {
-            EAidInvalid,
-            EAidActive,
-            EAidNotActive,
-            EAidNull
-            };
-        /**
-        * The header of AID from etelsat is A0 in hex equaled to 160 in decemal.
-        * The second, third and fourth byte of AID is 0. 
-        */    
-        enum TAidBytes
-            {
-            EAid0,
-            EAidA0 = 160
-            };
-
-    private:
-
-        /**
         * C++ default constructor.
         */
         CRefreshRequiredHandler();
@@ -178,19 +155,6 @@
         */
         void RefreshAllowed( const TDesC8& aRsp );
         
-        /**
-        * Get the indicated AID state according to 
-        * the current application's AID. 
-        * @return TAidstate indicating the state of the indicated AID. 
-        */
-        TAidState AidState() const;
-
-        /**
-        * Check whether the current application's AID is valid. 
-        * @return TBool indicating whether the indicated AID is valid. 
-        * @param aAid RefreshRequired AID data from etelsat.       
-        */
-        TBool IsValidAid( const RSat::TAid& aAid ) const;
     private:    // Data
 
         // Refresh command data.
@@ -222,7 +186,7 @@
 
         // Response of refresh query.
         TBool iAllowRefresh;
-
+        
     };
 
 #endif      // CREFRESHREQUIREDHANDLER_H
--- a/satengine/SatServer/Commands/RefreshRequiredCmd/src/CRefreshRequiredHandler.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Commands/RefreshRequiredCmd/src/CRefreshRequiredHandler.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -30,12 +30,8 @@
 #include    "MSatUiSession.h"
 #include    "SatSOpcodes.h"
 #include    "MSatRefreshSubSession.h"
-#include    "msatmultimodeapi.h"
 #include    "SatLog.h"
 
-// CONSTANTS
-const TInt KAidMinSize( 12 );
-
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -367,38 +363,6 @@
         iRefreshRequiredRsp.iAdditionalInfo[0] = RSat::KMeBusyOnCall;
         commandAllowed = EFalse;
         }
-    //Check the AidState.
-    else
-        {
-        const TAidState aidState = AidState();
-        LOG2( NORMAL, "REFRESHREQ: AID state: %i", aidState )
-        switch ( aidState )
-            {
-            case EAidNotActive:
-                {
-                iRefreshRequiredRsp.iGeneralResult =
-                    RSat::KRefreshUSIMNotActive;
-                iRefreshRequiredRsp.iInfoType = RSat::KNoAdditionalInfo;
-                commandAllowed = EFalse;
-                break;
-                }
-
-            case EAidInvalid:
-                {
-                iRefreshRequiredRsp.iGeneralResult =
-                    RSat::KCmdDataNotUnderstood;
-                iRefreshRequiredRsp.iInfoType = RSat::KNoAdditionalInfo;
-                commandAllowed = EFalse;
-                break;
-                }
-
-            default:
-                {
-                LOG( NORMAL, "REFRESHREQ:   Refresh allowed" )
-                break;
-                }
-            }
-        }
 
     // When refresh is not allowed, send terminal response to sim.
     if ( !commandAllowed )
@@ -761,87 +725,5 @@
 
     LOG( SIMPLE, "REFRESHREQ: CRefreshRequiredHandler::RefreshAllowed exiting" )
     }
-    
-// -----------------------------------------------------------------------------
-// CRefreshHandler::CheckIndicatedAid
-// Check the state of the indicated Aid.
-// -----------------------------------------------------------------------------
-//
-CRefreshRequiredHandler::TAidState 
-CRefreshRequiredHandler::AidState() const
-    {
-    LOG( SIMPLE, "REFRESHREQ: CRefreshRequiredHandler::AidState calling" )
-
-    TAidState aidState( EAidNotActive );
-    if ( !iRefreshRequiredData.iAid.Length() )
-        {
-        aidState = EAidNull;
-        LOG( SIMPLE, "REFRESHREQ: Indicated AID Null" )
-        }
-    else if ( !IsValidAid( iRefreshRequiredData.iAid ) )
-        {
-        aidState = EAidInvalid;
-        LOG( SIMPLE, "REFRESHREQ: Indicated AID Invalid" )
-        }
-    else
-        {
-        RSat::TAid aid;
-        MSatAsyncToSync* wrapper = iUtils->CreateAsyncToSyncHelper();
-        if ( wrapper )
-            {
-            iUtils->MultiModeApi().GetCurrentActiveUSimApplication(
-                wrapper->RequestStatus() , aid );
-            // wait until GetCurrentActiveUSimApplication return aid
-            TInt err = wrapper->SetActiveAndWait();
-            LOG2( NORMAL, "REFRESHREQ: CRefreshHandler::TAidState err %d",err )
-            wrapper->Release();
-            
-            if ( KErrNone == err )
-                {
-                #ifdef ENABLE_SAT_LOGGING
-                for ( TInt i=0; i < aid.Length(); i++ )
-                    {
-                    LOG2( DETAILED, "REFRESHREQ: AID from TSY: %x", aid[i] )
-                    }
-                #endif
-                if ( aid == iRefreshRequiredData.iAid )
-                    {
-                    aidState = EAidActive;
-                    }
-                }
-            else if ( KErrNotSupported == err )
-                {
-                aidState = EAidActive;
-                }
-            }
-        LOG( SIMPLE, "REFRESHREQ: CRefreshRequiredHandler::AidState exit" )
-        }
-    return aidState;
-    }
-
-// -----------------------------------------------------------------------------
-// Check whether the given AID is valid.
-// According to TS 110 220
-// -----------------------------------------------------------------------------
-TBool CRefreshRequiredHandler::IsValidAid( const RSat::TAid& aAid ) const
-    {
-    LOG( SIMPLE, "REFRESHREQ: CRefreshRequiredHandler::\
-            IsValidAid calling-exiting" )
-    TInt result ( EFalse );
-    // Check the length of AID, it should be between 12 to 16 bytes
-    // ETSI: A0,00,00,00,09;
-    // 3GPP: A0,00,00,00,87
-    // the fifth byte is not sure in other situations. 
-    //compare the first to fourth byte
-    if ( KAidMinSize <= aAid.Length() && RSat::KAidMaxSize >= aAid.Length() )
-        {
-        if ( EAidA0 == aAid[0]&& EAid0 == aAid[1] &&
-            EAid0 == aAid[2]&& EAid0 == aAid[3] )
-            {
-            result = ETrue;
-            }
-        }
-    return result;
-    }
 
 //  End of File
--- a/satengine/SatServer/Commands/SendUSSDCmd/group/SendUssdCmd.mmp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Commands/SendUSSDCmd/group/SendUssdCmd.mmp	Thu Aug 19 10:28:14 2010 +0300
@@ -48,6 +48,7 @@
 LIBRARY                 SatEngine.lib
 LIBRARY                 phoneclient.lib         // Ussd sender
 LIBRARY                 aknnotify.lib
+LIBRARY                 centralrepository.lib   // CRepository
 
 #ifdef ENABLE_SAT_LOGGING
 LIBRARY                 flogger.lib
--- a/satengine/SatServer/Commands/SendUSSDCmd/inc/CSendUssdHandler.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Commands/SendUSSDCmd/inc/CSendUssdHandler.h	Thu Aug 19 10:28:14 2010 +0300
@@ -289,6 +289,10 @@
      */
     TBool iIconCommand;
 
+    /**
+     * Indicates whether the result of sending USSD is displayed
+     */
+    TBool iIsSatDisplayUssdResult;
     };
 
 #endif      // CSENDUSSDHANDLER_H
--- a/satengine/SatServer/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -21,6 +21,8 @@
 #include    <AknGlobalNote.h>
 #include    <exterror.h>
 #include    <avkon.rsg>
+#include    <centralrepository.h>
+#include    <SATPrivateCRKeys.h>
 
 #include    "MSatSystemState.h"
 #include    "MSatApi.h"
@@ -566,10 +568,40 @@
     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" )
+    CRepository* repository = NULL;
+
+    TRAPD( result, repository = CRepository::NewL( KCRUidSatServer ); );
+    LOG2( NORMAL, "SENDUSSD: CSendUssdHandler::CSendUssdHandler \
+        open CRepository result: %d", result )
+
+    if ( repository && ( KErrNone == result ) )
+        {
+        result = repository->Get( KSatDisplayUssdResult, 
+        iIsSatDisplayUssdResult );
+        LOG2( NORMAL, 
+             "SENDUSSD: CSendUssdHandler::CSendUssdHandler \
+              get CRepository key iIsSatDisplayUssdResult: %d", 
+              iIsSatDisplayUssdResult )
+        
+        if ( KErrNone != result )
+            {
+            LOG2( NORMAL, 
+                 "SENDUSSD: CSendUssdHandler::CSendUssdHandler \
+                 get CRepository key error result: %d", 
+                 result )
+            }
+        }
+
+    delete repository;
+    repository = NULL;
+
+    LOG( SIMPLE,
+        "SENDUSSD: CSendUssdHandler::CSendUssdHandler exiting" )
     }
 
 
@@ -597,12 +629,15 @@
 
     iSendUssdRsp.iUssdString.iUssdString.Copy( receiveMessage );
 
-    if ( RSat::EAlphaIdProvided != iSendUssdData.iAlphaId.iStatus )
+    if ( ( RSat::EAlphaIdProvided != iSendUssdData.iAlphaId.iStatus )
+          && iIsSatDisplayUssdResult )
         {
         // if no Alpha ID provided, show the text note.
-        LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SendUssdString Show Note" )
+        LOG( SIMPLE, "SENDUSSD: CSendUssdHandler::SendUssdString \
+        Show USSD result Note" )
         TRAP_IGNORE( 
-            ShowUssdResponseNoteL( iSendUssdRsp.iUssdString.iUssdString ) );
+        ShowUssdResponseNoteL( 
+        iSendUssdRsp.iUssdString.iUssdString ) );
         }
 
     HandleSendUssdResult( error );
--- a/satengine/SatServer/Engine/inc/CSatApnHandler.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Engine/inc/CSatApnHandler.h	Thu Aug 19 10:28:14 2010 +0300
@@ -25,6 +25,8 @@
 #include "MSatApnHandler.h"
 
 class MSatUtils;
+class RCmConnectionMethod;
+class RCmManager;
 
 /**
 *  Handles the Access point operations with CMManager. Searches, inserts and
@@ -123,6 +125,15 @@
         */
         HBufC* FormatAPN( const RSat::TAccessName& aReqApn ) const;
 
+        /**
+         * Get default connection method.
+         *
+         * @param aCmManager Input Connection method manager.
+         * @param aDefCm Output reference to RCmConnectionMethod.
+         * @return None
+         */
+        void GetDefConnMethodL( RCmManager& aCmManager, 
+            RCmConnectionMethod& aDefCm );
     private:  // Data
 
         // Reference to command container
--- a/satengine/SatServer/Engine/inc/csatmultimodeapi.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Engine/inc/csatmultimodeapi.h	Thu Aug 19 10:28:14 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -143,13 +143,6 @@
     void DialCancel();
 
     /**
-     * Access RMobilePhone::GetCurrentActiveUSimApplication
-     */
-    void GetCurrentActiveUSimApplication( TRequestStatus& aReqStatus, 
-                    RMobilePhone::TAID& aAID );
-
-
-    /**
      * Check if there is an incoming call 
      * @return ETrue if there is an incoming call
      */
--- a/satengine/SatServer/Engine/src/CSatApnHandler.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Engine/src/CSatApnHandler.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -397,59 +397,33 @@
     {
     LOG( SIMPLE, "SATENGINE: CSatApnHandler::FindDefaultApL calling" );
     TUint32 defaultIap( 0 );
-    TInt pdpType;
-    TBool isFound( EFalse );
+    TInt pdpType( 0 );
 
-    // create a network destination
-    RCmDestination des;
-    RCmConnectionMethod cm;
-
-    // Create CMManager Session
+    // create CMManager Session
     RCmManager cmManager;
     cmManager.OpenL();
     CleanupClosePushL( cmManager );
 
-    // Get the Connection Method list from the open CMManager session
-    RArray<TUint32> array = RArray<TUint32>( KSatCMGranularity );
-    CleanupClosePushL( array );
-
-    // list all available destinations' id
-    cmManager.AllDestinationsL( array );
-    for( TInt i = 0; ( i < array.Count() ) && !isFound; ++i )
-        {
-        des = cmManager.DestinationL( array[i] );
-        CleanupClosePushL( des );
+    // create a network connection method
+    RCmConnectionMethod cm;
+    CleanupClosePushL( cm );
+    // get a default connection method
+    GetDefConnMethodL( cmManager, cm );
 
-        if ( CMManager::ESnapPurposeInternet ==
-        des.MetadataL( CMManager::ESnapMetadataPurpose ) )
-            {
-            LOG( SIMPLE, "SATENGINE: CSatApnHandler::FindDefaultApL \
-            the fixed destination is identified as 'Internet'" );
-            for( TInt j = 0; ( j < des.ConnectionMethodCount() ) &&
-            !isFound; ++j )
-                {
-                cm = des.ConnectionMethodL( j );
-                CleanupClosePushL( cm );
-                pdpType = cm.GetIntAttributeL(
-                        CMManager::EPacketDataPDPType );
-                LOG2( SIMPLE, "SATENGINE: CSatApnHandler::FindDefaultApL \
-                        current protocol type is %d", pdpType )
-                if ( pdpType == aPdpType )
-                    {
-                    defaultIap = cm.GetIntAttributeL( CMManager::ECmIapId );
-                    isFound  = ETrue;
-                    LOG2( SIMPLE, "SATENGINE: CSatApnHandler::FindDefaultApL \
-                            default iap had been found %d", defaultIap )
-                    }
-                CleanupStack::PopAndDestroy( &cm );
-                }
-            }
-        CleanupStack::PopAndDestroy( &des );
+    // get pdp type
+    pdpType = cm.GetIntAttributeL( CMManager::EPacketDataPDPType );
+    if ( pdpType == aPdpType )
+        {
+        // get a default iap id
+        defaultIap = cm.GetIntAttributeL( CMManager::ECmIapId );
+        LOG2( SIMPLE, "SATENGINE: CSatApnHandler::FindDefaultApL \
+                  default iap had been found defaultIap = %d", defaultIap )
         }
-    CleanupStack::PopAndDestroy( &array );
+
+    CleanupStack::PopAndDestroy( &cm );
     CleanupStack::PopAndDestroy( &cmManager );
 
-    if ( !isFound )
+    if ( !defaultIap )
         {
         LOG( SIMPLE, "SATENGINE: CSatApnHandler: default AP not found" );
         User::Leave( KErrNotFound );
@@ -458,4 +432,48 @@
     LOG( SIMPLE, "SATENGINE: CSatApnHandler::FindDefaultApL exit" )
     return defaultIap;
     }
+
+// --------------------------------------------------------------------------
+// CSatApnHandler::GetDefConnMethodL
+// --------------------------------------------------------------------------
+void CSatApnHandler::GetDefConnMethodL( RCmManager& aCmManager, 
+        RCmConnectionMethod& aDefCm )
+    {
+    LOG( SIMPLE, "SATENGINE: CSatApnHandler::GetDefConnMethodL calling" )
+
+    // Go through the default connection methods to find
+    // the one valid method
+    TCmDefConnValue defConn;
+    aCmManager.ReadDefConnL( defConn );
+
+    LOG3( SIMPLE, "SATENGINE: CSatApnHandler::\
+    GetDefConnMethodL DefConn type=%d, id=%d", 
+    defConn.iType, defConn.iId )
+
+    // Default setting is a connection method
+    if ( ECmDefConnConnectionMethod == defConn.iType )
+        {
+        LOG( SIMPLE, "SATENGINE: CSatApnHandler::\
+        GetDefConnMethodL ECmDefConnConnectionMethod" )
+        // get a default connection method 
+        aDefCm = aCmManager.ConnectionMethodL( defConn.iId );
+        }
+    // Default setting is a destination method
+    else if ( ECmDefConnDestination == defConn.iType )
+        {
+        RCmDestination defDes;
+        CleanupClosePushL( defDes );
+
+        LOG( SIMPLE, "SATENGINE: CSatApnHandler::\
+        GetDefConnMethodL ECmDefConnDestination" )
+        // get a default destination
+        defDes = aCmManager.DestinationL( defConn.iId );
+        // get the first default connection method from destination
+        aDefCm = defDes.ConnectionMethodL( 0 );
+
+        CleanupStack::PopAndDestroy( &defDes );
+        }
+
+    LOG( SIMPLE, "SATENGINE: CSatApnHandler::GetDefConnMethodL exit" )
+    }
 //  End of File
--- a/satengine/SatServer/Engine/src/csatmultimodeapi.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/Engine/src/csatmultimodeapi.cpp	Thu Aug 19 10:28:14 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 "Eclipse Public License v1.0"
@@ -290,21 +290,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CSatMultiModeApi::GetCurrentActiveUSimApplication
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSatMultiModeApi::GetCurrentActiveUSimApplication(
-                         TRequestStatus& aReqStatus, RMobilePhone::TAID& aAID )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatMultiModeApi::\
-            GetCurrentActiveUSimApplication calling" )
-    iPhone.GetCurrentActiveUSimApplication( aReqStatus,aAID );
-    LOG( SIMPLE, "SATENGINE: CSatMultiModeApi::\
-            GetCurrentActiveUSimApplication exiting" )
-    }
-
-// -----------------------------------------------------------------------------
 // CSatMultiModeApi::IsCallIncoming
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
Binary file satengine/SatServer/conf/sat.confml has changed
Binary file satengine/SatServer/conf/sat_102078E1.crml has changed
--- a/satengine/SatServer/inc/SATPrivateCRKeys.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/inc/SATPrivateCRKeys.h	Thu Aug 19 10:28:14 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -60,6 +60,14 @@
 * Default value: N/A
 */
 const TUint32 KSatHomeZoneIconVisible( 0x00000032 );
+
+// Defines whether USSD sending result is shown if no alpha id
+/**
+* Support is disabled if value is 0
+*
+* Default value: N/A
+*/
+const TUint32 KSatDisplayUssdResult( 0x00000064 );
 #endif      // SATPRIVATECRKEYS_H
 
 // End of File
--- a/satengine/SatServer/inc/msatmultimodeapi.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satengine/SatServer/inc/msatmultimodeapi.h	Thu Aug 19 10:28:14 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 "Eclipse Public License v1.0"
@@ -126,12 +126,6 @@
      * Access RMobileCall::DialCancel
      */
     virtual void DialCancel() = 0;
-    /**
-     * Access RMobilePhone::GetCurrentActiveUSimApplication
-     * for the paramter information please see the etelmm.h
-     */
-    virtual void GetCurrentActiveUSimApplication( TRequestStatus& aReqStatus, 
-                RMobilePhone::TAID& aAID ) = 0;
 
     /**
      * Check if there is an incoming call 
--- a/satui/satapp/SATUIInc/CSatUiViewAppUi.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satui/satapp/SATUIInc/CSatUiViewAppUi.h	Thu Aug 19 10:28:14 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -623,6 +623,13 @@
         */
         void StopPlayToneL();
         
+        /**
+        * Check if foreground control is alive when HandleForegroundEventL is 
+        * called.
+        * @return ETrue if the foreground control is alive.
+        */
+        TBool CSatUiViewAppUi::ForegroundAlive() const;
+        
     private: //Data
 
         // Own: use timer repeat
--- a/satui/satapp/SATUISrc/CSatUiViewAppUi.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satui/satapp/SATUISrc/CSatUiViewAppUi.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -1268,7 +1268,7 @@
         {
         TFLOGSTRING( "CSatUiViewAppUi::HandleForegroundEventL \
             need to display a dialog" )
-        if ( iForegroundControl )
+        if ( iForegroundControl && ForegroundAlive() )
             {
             iForegroundControl->SetFocus( ETrue, EDrawNow );
             }
@@ -3530,5 +3530,34 @@
         }
     TFLOGSTRING( "CSatUiViewAppUi::StopPlayToneL exiting" )
     }
+    
+// -----------------------------------------------------------------------------
+// CSatUiViewAppUi::ForegroundAlive
+// Check if foreground control is alive when HandleForegroundEventL is called.
+// -----------------------------------------------------------------------------
+//
+TBool CSatUiViewAppUi::ForegroundAlive() const
+    {
+    TFLOGSTRING( "CSatUiViewAppUi::ForegroundAlive called" )
+    
+    // Only if value of iForegroundControl equals to one of the following 8
+    // pointers, the alive value will be set to true. This will check if 
+    // the foreground control is alive.
+    TBool alive = 
+        iForegroundControl == static_cast<CCoeControl*>( iWaitNote ) 
+        || iForegroundControl == static_cast<CCoeControl*>( 
+           iDisplayTextIconDialog )
+        || iForegroundControl == static_cast<CCoeControl*>( 
+           iDisplayTextDialog )
+        || iForegroundControl == static_cast<CCoeControl*>( iGetInputDialog )
+        || iForegroundControl == static_cast<CCoeControl*>( iPermanentNote )
+        || iForegroundControl == static_cast<CCoeControl*>( iNoteDialog )
+        || iForegroundControl == static_cast<CCoeControl*>( iBipWaitNote )
+        || iForegroundControl == static_cast<CCoeControl*>( iQueryDialog );
+    
+    TFLOGSTRING2( "CSatUiViewAppUi::ForegroundAlive exiting alive=%d", alive )
+    
+    return alive;
+    }
 
 // End of File
--- a/satui/satplugin/aisatplugininc/caisatengine.h	Thu Jul 15 19:16:18 2010 +0300
+++ b/satui/satplugin/aisatplugininc/caisatengine.h	Thu Aug 19 10:28:14 2010 +0300
@@ -23,7 +23,7 @@
 
 #include <e32property.h>
 #include <SATInternalPSKeys.h>
-#include <RSatSession.h>          // For idle mode text and icon  
+#include <rsatsession.h>          // For idle mode text and icon  
 #include <rsatservice.h>          // For idle mode text and icon
 #include <tsaticoninfo.h>
 
--- a/satui/satplugin/aisatpluginsrc/caisatnotifier.cpp	Thu Jul 15 19:16:18 2010 +0300
+++ b/satui/satplugin/aisatpluginsrc/caisatnotifier.cpp	Thu Aug 19 10:28:14 2010 +0300
@@ -20,7 +20,7 @@
 // INCLUDE FILES
 #include <e32base.h>
 #include <etelsat.h>
-#include <RSatSession.h>
+#include <rsatsession.h>
 #include <rsatservice.h>
 
 #include "caisatnotifier.h"