Revision: 201001
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:33:49 +0200
changeset 2 086aae6fc07e
parent 1 40cb640ef159
child 3 f7816ffc66ed
Revision: 201001 Kit: 201003
bearermanagement/S60MCPR/inc/s60mcpr.h
bearermanagement/S60MCPR/inc/s60mcpractivities.h
bearermanagement/S60MCPR/inc/s60mcprstates.h
bearermanagement/S60MCPR/src/s60mcpractivities.cpp
bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp
bearermanagement/S60MCPR/src/s60mcprstates.cpp
bearermanagement/mpm/src/mpmconfirmdlgstarting.cpp
bearermanagement/mpm/src/mpmiapselection.cpp
bearermanagement/mpm/src/mpmserversession.cpp
bearermanagement/mpm/src/mpmwlanquerydialog.cpp
cmmanager/cmmgr/Framework/Group/bld.inf
cmmanager/cmmgr/Framework/Src/cmconnsettingsuiimpl.cpp
cmmanager/cmmgr/Framework/Src/cmmanagerimpl.cpp
cmmanager/cmmgr/Framework/conf/cmmanager.confml
cmmanager/cmmgr/Framework/conf/cmmanager_10207376.crml
cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpluginwlan.cpp
cmmanager/cmmgr/database/inc/datamobilitycommsdattypes.h
cmmanager/cmmgr/database/src/cmmanagertableformats.cpp
cmmanager/gsconnsettingsplugin/src/gsconnsettingspluginmodel.cpp
cmmanager/gsconnsettingsplugin/traces/OstTraceDefinitions.h
cmmanager/gsconnsettingsplugin/traces/gsconnsettingspluginmodelTraces.h
connectionmonitoring/connectionmonitorui/help/inc/cmon.hlp.hrh
connectionmonitoring/connectionmonitorui/inc/ConnectionInfoBase.h
connectionmonitoring/connectionmonitorui/inc/ConnectionMonitorUiDetailsView.h
connectionmonitoring/connectionmonitorui/src/ConnectionInfoBase.cpp
connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiAppUi.cpp
connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsContainer.cpp
connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsView.cpp
connectionmonitoring/connmon/connectionmonitor/group/ConnMon.mmp
connectionmonitoring/connmon/connectionmonitor/inc/ConnMonIAP.h
connectionmonitoring/connmon/connectionmonitor/inc/ConnMonServ.h
connectionmonitoring/connmon/connectionmonitor/inc/cellulardatausagekeyupdater.h
connectionmonitoring/connmon/connectionmonitor/src/ConnMonNoti.cpp
connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp
connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp
connectionmonitoring/connmon/dataconnectionlogger/src/saeobserver.cpp
dbcreator/commsdatcreator/Inc/cdcprocessorglobal.h
dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp
dbcreator/commsdatcreator/Src/cdcreaderxml.cpp
dbcreator/conf/commsdatcreator.confml
dbcreator/inc/cdccommon.h
ipcm_plat/commsdat_wlan_api/inc/cmmanagertablefields.h
ipcm_plat/extended_connection_settings_api/group/bld.inf
ipcm_plat/extended_connection_settings_api/inc/cmmanagerkeys.h
ipcm_pub/connection_settings_api/inc/cmgenconnsettings.h
--- a/bearermanagement/S60MCPR/inc/s60mcpr.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60mcpr.h	Mon Jan 18 20:33:49 2010 +0200
@@ -62,6 +62,7 @@
             EMPMPreferredCarrierAvailableMsg,
             EMPMStartIAPNotificationMsg,
             EMPMErrorNotificationMsg,
+            EMPMStartupErrorIgnoredMsg,
             };
   public: 
     typedef Messages::TMessageSigVoid<EMPMReselectBestIAPCompletedMsg, TCFS60MCPRMessage::ERealmId>     TMPMReselectBestIAPCompletedMsg;
@@ -70,6 +71,7 @@
     typedef Messages::TMessageSigAny<EMPMPreferredCarrierAvailableMsg, TCFS60MCPRMessage::ERealmId>     TMPMPreferredCarrierAvailableMsg;
     typedef Messages::TMessageSigNumber<EMPMStartIAPNotificationMsg, TCFS60MCPRMessage::ERealmId>       TMPMStartIAPNotificationMsg;
     typedef Messages::TMessageSigNumber<EMPMErrorNotificationMsg, TCFS60MCPRMessage::ERealmId>          TMPMErrorNotificationMsg;
+    typedef Messages::TMessageSigVoid<EMPMStartupErrorIgnoredMsg, TCFS60MCPRMessage::ERealmId>          TMPMStartupErrorIgnoredMsg;
     };
 
 /**
--- a/bearermanagement/S60MCPR/inc/s60mcpractivities.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60mcpractivities.h	Mon Jan 18 20:33:49 2010 +0200
@@ -286,8 +286,6 @@
     /**
      * CS60ConnectionRecoveryActivity is the S60 version of the ErrorRecovery -activity
      * that is responsible to process connection errors whenever it happens.
-     *  
-     * -jl- TODO Either finalize or remove S60CConnectionRecoveryActivity after EC158(?) 
      */
     class CS60ConnectionRecoveryActivity : public S60MCprStates::CS60ErrorRecoveryActivity
         {
@@ -526,17 +524,29 @@
     DECLARE_SMELEMENT_FOOTER( TAwaitingMigrationRequestedOrRejectedOrCancel )
 
     /**
-     * STATE: Watis for application response.
-     * @return ETrue if Migration Accepted or Rejected. 
+     * STATE: Waits for application response.
+     * @return ETrue if Migration Accepted or Rejected or Start-up Error Ignored. 
      */
-    DECLARE_SMELEMENT_HEADER( TAwaitingMigrationAcceptedOrRejectedOrCancel, 
+    DECLARE_SMELEMENT_HEADER( TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel, 
                               MeshMachine::TState<TContext>, 
                               NetStateMachine::MState, 
                               TContext )
     virtual TBool Accept();
-    DECLARE_SMELEMENT_FOOTER( TAwaitingMigrationAcceptedOrRejectedOrCancel )
+    DECLARE_SMELEMENT_FOOTER( TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel )
 
     /**
+     * STATE: Waits for IPCPR rejected response that ends the mobility handshake.
+     * @return ETrue if Rejected. 
+     */
+    DECLARE_SMELEMENT_HEADER( TAwaitingMigrationRejected, 
+                              MeshMachine::TState<TContext>, 
+                              NetStateMachine::MState, 
+                              TContext )
+    virtual TBool Accept();
+    DECLARE_SMELEMENT_FOOTER( TAwaitingMigrationRejected )
+    
+    
+    /**
      * FORK/DECISION: Returns the KStartMobilityHandshake backwards or error
      * @return KStartMobilityHandshake backwards or error
      */
@@ -563,14 +573,15 @@
      * 1. Application accepted, continue to send accept to policy server.
      * 2. Error
      * 3. Application rejected, continue to send reject to policy server.
+     * 4. Error process occured, consume the next rejected msg/accept msg.
      * @return TransitionTag of the selected transition.
      */
-    DECLARE_SMELEMENT_HEADER( TNoTagOrErrorTagOrApplicationRejected, 
+    DECLARE_SMELEMENT_HEADER( TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected, 
                               MeshMachine::TStateFork<TContext>, 
                               NetStateMachine::MStateFork, 
                               TContext )
     virtual TInt TransitionTag();
-    DECLARE_SMELEMENT_FOOTER( TNoTagOrErrorTagOrApplicationRejected )
+    DECLARE_SMELEMENT_FOOTER( TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected )
     
     /**
      * FORK/DECISION: Decides whether to wait MPM actions or report an error. 
--- a/bearermanagement/S60MCPR/inc/s60mcprstates.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60mcprstates.h	Mon Jan 18 20:33:49 2010 +0200
@@ -55,6 +55,7 @@
     const TInt KWaitPolicyServerResponse = 11051;
     const TInt KInformMigrationAvailable = 11052;
     const TInt KSendInitialApplicationReject = 11053; 
+    const TInt KConsumeRejectedMsg = 11054;
     /**
      * Execution context
      */
--- a/bearermanagement/S60MCPR/src/s60mcpractivities.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcpractivities.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -315,8 +315,8 @@
     // If the migration was acepted we loop again waiting for a new, preferred one
     NODEACTIVITY_ENTRY( KNoTag, 
                         CS60MobilityActivity::TInformMigrationCompleted, 
-                        S60MCprMobilityActivity::TAwaitingMigrationAcceptedOrRejectedOrCancel,
-                        S60MCprMobilityActivity::TNoTagOrErrorTagOrApplicationRejected ) //-jl- TODO cancel here?
+                        S60MCprMobilityActivity::TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel,
+                        S60MCprMobilityActivity::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected )
     // Informs policy server that application has accepted the carrier
     THROUGH_NODEACTIVITY_ENTRY( KNoTag,
                                 CS60MobilityActivity::TSendApplicationAccept,
@@ -325,6 +325,12 @@
     THROUGH_NODEACTIVITY_ENTRY( S60MCprStates::KApplicationRejectedMigration,
                                 CS60MobilityActivity::TSendApplicationReject,
                                 TTag<S60MCprStates::KWaitPolicyServerResponse|NetStateMachine::EBackward> )
+    // Waits for Migration Rejected the carrier -msg and consumes it, because MPM doesn't need it.
+    // MPM already received the ProcessError which is enough.
+    NODEACTIVITY_ENTRY( S60MCprStates::KConsumeRejectedMsg,
+                        CS60MobilityActivity::TClearHandshakingFlag,
+                        S60MCprMobilityActivity::TAwaitingMigrationRejected,
+                        TTag<S60MCprStates::KWaitPolicyServerResponse|NetStateMachine::EBackward> )
     // On error, we do not terminate the activity.
     // We need to inform the client and propose a new handshake should the client wish to continue
 	// Shut down the layer, to release the rejected bearer
--- a/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -140,23 +140,38 @@
 
 
     // -----------------------------------------------------------------------------
-    // S60MCprMobilityActivity::TAwaitingMigrationAcceptedOrRejectedOrCancel::Accept
+    // S60MCprMobilityActivity::TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel::Accept
     // -----------------------------------------------------------------------------
     //
-    DEFINE_SMELEMENT( TAwaitingMigrationAcceptedOrRejectedOrCancel, NetStateMachine::MState, TContext )
-    TBool TAwaitingMigrationAcceptedOrRejectedOrCancel::Accept()
+    DEFINE_SMELEMENT( TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel, NetStateMachine::MState, TContext )
+    TBool TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel::Accept()
         {
         if ( (iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationAccepted>()) ||
              (iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>()) ||
+             (iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMStartupErrorIgnoredMsg>()) ||
              (iContext.iMessage.IsMessage<TEBase::TCancel>()) )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingMigrationAcceptedOrRejectedOrCancel::Accept()",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel::Accept()",(TInt*)&iContext.Node())
             return ETrue;
             }
         return EFalse;
         }
-
-
+    
+    // -----------------------------------------------------------------------------
+    // S60MCprMobilityActivity::TAwaitingMigrationRejected::Accept
+    // -----------------------------------------------------------------------------
+    //
+    DEFINE_SMELEMENT( TAwaitingMigrationRejected, NetStateMachine::MState, TContext )
+    TBool TAwaitingMigrationRejected::Accept()
+        {
+        if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
+            {
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingMigrationRejected::Accept()",(TInt*)&iContext.Node())
+            return ETrue;
+            }
+        return EFalse;
+        }
+    
     // -----------------------------------------------------------------------------
     // S60MCprMobilityActivity::TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel::TransitionTag
     // -----------------------------------------------------------------------------
@@ -229,30 +244,35 @@
 
 
     // -----------------------------------------------------------------------------
-    // S60MCprMobilityActivity::TNoTagOrErrorTagOrApplicationRejected::TransitionTag
+    // S60MCprMobilityActivity::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag
     // -----------------------------------------------------------------------------
     //
-    DEFINE_SMELEMENT( TNoTagOrErrorTagOrApplicationRejected, NetStateMachine::MStateFork, TContext )
-    TBool TNoTagOrErrorTagOrApplicationRejected::TransitionTag()
+    DEFINE_SMELEMENT( TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected, NetStateMachine::MStateFork, TContext )
+    TBool TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag()
         {
         if ( iContext.iNodeActivity->Error() )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejected::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
             return MeshMachine::KErrorTag | NetStateMachine::EForward;
             }
         if ( message_cast<TCFMobilityProvider::TMigrationAccepted>(&iContext.iMessage) )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejected::TransitionTag() KNoTag",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag() KNoTag",(TInt*)&iContext.Node())
             return MeshMachine::KNoTag | NetStateMachine::EForward;
             }
         else if ( message_cast<TCFMobilityProvider::TMigrationRejected>(&iContext.iMessage) )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejected::TransitionTag() KApplicationRejectedMigration",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag() KApplicationRejectedMigration",(TInt*)&iContext.Node())
             return S60MCprStates::KApplicationRejectedMigration | NetStateMachine::EForward; 
             }
+        else if ( message_cast<TCFS60MCPRMessage::TMPMStartupErrorIgnoredMsg>(&iContext.iMessage) )
+            {
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag() KSwallowRejectedMsg",(TInt*)&iContext.Node())
+            return S60MCprStates::KConsumeRejectedMsg | NetStateMachine::EForward; 
+            }
         else
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejected::TransitionTag() KCancelTag",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected::TransitionTag() KCancelTag",(TInt*)&iContext.Node())
             return MeshMachine::KCancelTag | NetStateMachine::EForward;
             }
         }
--- a/bearermanagement/S60MCPR/src/s60mcprstates.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcprstates.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -465,6 +465,15 @@
          ( aCompletedRequest.iNeededAction == EIgnoreError ||
            aCompletedRequest.iNeededAction == EDoReselection ))
         {
+        // Send error recovery propagated msg to self. This way a potential mobility 
+        // handshake knows that there were a problem with migrated IAP.
+        // In case there isn't mobility active available this just results as stray msg
+        if ( aCompletedRequest.iNeededAction == EIgnoreError )
+            {
+            iNode.SelfInterface().PostMessage( iNode.Id(), 
+                    TCFS60MCPRMessage::TMPMStartupErrorIgnoredMsg().CRef() );
+            }
+        
         TCFS60MCPRMessage::TMPMProcessErrorCompletedMsg msg( (TInt)aCompletedRequest.iNeededAction );
         iLastRequestOriginator.ReplyTo( iNode.Id(), msg );
         iLastRequestOriginator.Close();
@@ -480,6 +489,8 @@
             ASSERT( aCompletedRequest.iError != KErrNone );
             err = aCompletedRequest.iError != KErrNone ? aCompletedRequest.iError : KErrGeneral;
             }
+            
+        // Send error msg indicatating the processerror has been completed.
         TEBase::TError msg( TCFS60MCPRMessage::TMPMProcessErrorCompletedMsg::Id(), err );
         iLastRequestOriginator.ReplyTo( iNode.Id(), msg );
         iLastRequestOriginator.Close();
--- a/bearermanagement/mpm/src/mpmconfirmdlgstarting.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/mpm/src/mpmconfirmdlgstarting.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -262,7 +262,7 @@
         //If reading of database failed we do not write back to the database to prevent random values
         if (errorCode == KErrNone)
             {
-            genConnSettings.iSeamlessnessHome = ECmSeamlessnessShowprogress;        
+            genConnSettings.iCellularDataUsageHome = ECmCellularDataUsageAutomatic;        
             TRAP_IGNORE(iServer.CommsDatAccess()->WriteGenConnSettingsL( genConnSettings )); 
             }
         } 
--- a/bearermanagement/mpm/src/mpmiapselection.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/mpm/src/mpmiapselection.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -505,9 +505,16 @@
     ChooseBestIAPL( iChooseIapPref, availableIAPList, iNextBestExists );
     TUint32 validateIapId = iChooseIapPref.IapId();
     // Check if any suitable IAP's were found, if not then complete selection with error code
-    if (validateIapId == 0 )
+    if ( validateIapId == 0 )
         {
-        ChooseIapComplete( KErrNotFound, NULL );
+        if ( iChooseIapPref.ConnType() == TMpmConnPref::EConnTypeDefault )
+            {
+            ImplicitConnectionL();
+            }
+        else
+            {
+            ChooseIapComplete( KErrNotFound, NULL );
+            }
         CleanupStack::PopAndDestroy( &availableIAPList );
         return;
         }
--- a/bearermanagement/mpm/src/mpmserversession.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/mpm/src/mpmserversession.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -838,31 +838,26 @@
         return EFalse;
         }
 
-    // Read global OCC seamlessness values from CommsDat's DefConn table
+    // Read global cellular data usage values from CommsDat's DefConn table
     genConnSettings = iMyServer.CommsDatAccess()->ReadGenConnSettingsL();
 
-    TUint32 currentSeamlessness( genConnSettings.iSeamlessnessHome );
+    TUint32 currentDataUsage( genConnSettings.iCellularDataUsageHome );
     
     if ( iMyServer.IsVisitorNetwork() )
         {
-        currentSeamlessness = genConnSettings.iSeamlessnessVisitor; 
+        currentDataUsage = genConnSettings.iCellularDataUsageVisitor; 
         }
 
-    if ( currentSeamlessness == ECmSeamlessnessShowprogress ||
-         currentSeamlessness == ECmSeamlessnessFullySeamless )
+    if ( currentDataUsage == ECmCellularDataUsageConfirm )
         {
-        MPMLOGSTRING( "CMPMServerSession::IsConfirmFirstL - False" )
-        isConfirmFirst = EFalse;
+        MPMLOGSTRING( "CMPMServerSession::IsConfirmFirstL - True" )
+        isConfirmFirst = ETrue;
         }
     else 
         {
-        // The currentSeamlessness value ECmSeamlessnessConfirmFirst 
-        // matches with need to display confirmation dialog.
-        // 
-        MPMLOGSTRING(
-            "CMPMServerSession::IsConfirmFirstL - True" )
-        isConfirmFirst = ETrue;
+        MPMLOGSTRING( "CMPMServerSession::IsConfirmFirstL - False" )
         }
+
     return isConfirmFirst;
     }
 
@@ -1106,7 +1101,7 @@
                 //If reading of database failed we do not write back to the database to prevent random values
                 if (errorCode == KErrNone)
                     {
-                    genConnSettings.iSeamlessnessHome = ECmSeamlessnessShowprogress;        
+                    genConnSettings.iCellularDataUsageHome = ECmCellularDataUsageAutomatic;        
                     TRAP_IGNORE(MyServer().CommsDatAccess()->WriteGenConnSettingsL( genConnSettings )); 
                     }
                 } 
@@ -3544,7 +3539,7 @@
 
     MPMLOGSTRING( "CMPMServerSession::IsWlanOnlyL")
 
-    // Read global OCC seamlessness values from CommsDat's DefConn table
+    // Read global cellular data usage values from CommsDat's DefConn table
     genConnSettings = iMyServer.CommsDatAccess()->ReadGenConnSettingsL();
 
     // Find out if new wlans can be prompted
@@ -3560,14 +3555,14 @@
         }
         
     // Find out is only WLAN connection is allowed in current network
-    TUint32 currentSeamlessness( genConnSettings.iSeamlessnessHome );
+    TUint32 currentCellularDataUsage( genConnSettings.iCellularDataUsageHome );
     
     if ( iMyServer.IsVisitorNetwork() )
         {
-        currentSeamlessness = genConnSettings.iSeamlessnessVisitor;  
+        currentCellularDataUsage = genConnSettings.iCellularDataUsageVisitor;  
         }
     
-    if ( currentSeamlessness == ECmSeamlessnessDisabled )
+    if ( currentCellularDataUsage == ECmCellularDataUsageDisabled )
         {
         MPMLOGSTRING( "CMPMServerSession::IsWlanOnlyL: True" )
         return ETrue;
--- a/bearermanagement/mpm/src/mpmwlanquerydialog.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/bearermanagement/mpm/src/mpmwlanquerydialog.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -332,14 +332,39 @@
                 }
             else // WiFiProt::EWiFiNoAuto
                 {
-                MPMLOGSTRING( "CMPMWlanQueryDialog::RunL No Auto, starting WPA key query" )
-                iWlanQueryState = EWpaSettings;
-                iNotifier.StartNotifierAndGetResponse( iStatus, 
-                                                       KUidEasyWpaDlg, 
-                                                       iNotifWpaKey, 
-                                                       iNotifWpaKey );
-                SetActive();
-                return;
+                if( iNetworkPrefs().iSecMode == EWlanConnectionSecurityWep )
+                    {
+                    MPMLOGSTRING( "CMPMWlanQueryDialog::RunL: No WPS, starting WEP key query" );
+                    iWlanQueryState = EWepSettings;
+                    iNotifier.StartNotifierAndGetResponse( iStatus, 
+                            KUidEasyWepDlg, 
+                            iNotifWep, 
+                            iNotifWep );
+                    SetActive();
+                    return;
+                    }
+                else if ( iNetworkPrefs().iSecMode == EWlanConnectionSecurityWpaPsk )
+                    {
+                    MPMLOGSTRING( "CMPMWlanQueryDialog::RunL: No WPS, starting WPA key query" );
+                    iWlanQueryState = EWpaSettings;
+                    iNotifier.StartNotifierAndGetResponse( iStatus, 
+                            KUidEasyWpaDlg, 
+                            iNotifWpaKey, 
+                            iNotifWpaKey );
+                    SetActive();
+                    return;
+                    }
+                else if ( iNetworkPrefs().iSecMode == EWlanConnectionSecurityOpen )
+                    {
+                    MPMLOGSTRING( "CMPMWlanQueryDialog::RunL: No WPS, sec mode open" );
+					iStatus = KErrNone;
+                    }
+                else
+                    {
+                    MPMLOGSTRING2( "CMPMWlanQueryDialog::RunL: No WPS, unsupported sec mode %d", 
+                            iNetworkPrefs().iSecMode );
+                    iStatus = KErrNotSupported;
+                    }
                 }
             }
         }
--- a/cmmanager/cmmgr/Framework/Group/bld.inf	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Group/bld.inf	Mon Jan 18 20:33:49 2010 +0200
@@ -23,7 +23,9 @@
 
 PRJ_EXPORTS
 // export localised loc file
-../loc/cmmanager.loc	MW_LAYER_LOC_EXPORT_PATH(cmmanager.loc)
+../loc/cmmanager.loc             MW_LAYER_LOC_EXPORT_PATH(cmmanager.loc)
+../conf/cmmanager.confml         MW_LAYER_CONFML(cmmanager.confml)
+../conf/cmmanager_10207376.crml  MW_LAYER_CRML(cmmanager_10207376.crml)
 
 PRJ_MMPFILES
 cmmanager.mmp
--- a/cmmanager/cmmgr/Framework/Src/cmconnsettingsuiimpl.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Src/cmconnsettingsuiimpl.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -319,6 +319,13 @@
                 }
             }
     
+    if ( aTitleStringResource == R_CMMANAGERUI_DEFAULT_CONNECTION_TITLE )
+        {
+        // It is not allowed to choose Connection Methods 
+        // in Default connection -dialog.
+        //
+        iOpenDestination = EFalse;
+        }
     
     if ( UserSelectionDlgL( listIndex, items, aSelection, 
                             aTitleStringResource,
--- a/cmmanager/cmmgr/Framework/Src/cmmanagerimpl.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Src/cmmanagerimpl.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -2331,11 +2331,11 @@
         TInt value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdUsageOfWlan );
         genConnSettings.iUsageOfWlan = TCmUsageOfWlan( value );
 
-        value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdSeamlessnessHome );
-        genConnSettings.iSeamlessnessHome = TCmSeamlessnessValue( value );
+        value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdCellularDataUsageHome );
+        genConnSettings.iCellularDataUsageHome = TCmCellularDataUsage( value );
 
-        value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdSeamlessnessVisitor );
-        genConnSettings.iSeamlessnessVisitor = TCmSeamlessnessValue( value );
+        value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdCellularDataUsageVisitor );
+        genConnSettings.iCellularDataUsageVisitor = TCmCellularDataUsage( value );
         }
 
     TInt typeVal = aDCSetting.iType;
@@ -2355,8 +2355,8 @@
     dcRcd->SetRecordId( KCDNewRecordRequest );
 
     SET_INT_FIELD(dcRcd, KCDTIdUsageOfWlan, genConnSettings.iUsageOfWlan );
-    SET_INT_FIELD(dcRcd, KCDTIdSeamlessnessHome, genConnSettings.iSeamlessnessHome );
-    SET_INT_FIELD(dcRcd, KCDTIdSeamlessnessVisitor, genConnSettings.iSeamlessnessVisitor );
+    SET_INT_FIELD(dcRcd, KCDTIdCellularDataUsageHome, genConnSettings.iCellularDataUsageHome );
+    SET_INT_FIELD(dcRcd, KCDTIdCellularDataUsageVisitor, genConnSettings.iCellularDataUsageVisitor );
 
     CLOG_WRITE_FORMAT( "Set default connection type: [%d]", typeVal );
     SET_INT_FIELD(    dcRcd, 
@@ -2427,11 +2427,11 @@
     TInt value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdUsageOfWlan );
     aGenConnSettings.iUsageOfWlan = TCmUsageOfWlan( value );
 
-    value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdSeamlessnessHome );
-    aGenConnSettings.iSeamlessnessHome = TCmSeamlessnessValue( value );
+    value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdCellularDataUsageHome );
+    aGenConnSettings.iCellularDataUsageHome = TCmCellularDataUsage( value );
 
-    value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdSeamlessnessVisitor );
-    aGenConnSettings.iSeamlessnessVisitor = TCmSeamlessnessValue( value );
+    value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], KCDTIdCellularDataUsageVisitor );
+    aGenConnSettings.iCellularDataUsageVisitor = TCmCellularDataUsage( value );
             
     CleanupStack::PopAndDestroy( defConnRecordSet );
     RollbackTransaction();
@@ -2467,8 +2467,8 @@
         }
     
     TInt usageOfNewWlan = aGenConnSettings.iUsageOfWlan;
-    TInt seamlessnessHome    = aGenConnSettings.iSeamlessnessHome;
-    TInt seamlessnessVisitor = aGenConnSettings.iSeamlessnessVisitor;
+    TInt cellularDataUsageHome    = aGenConnSettings.iCellularDataUsageHome;
+    TInt cellularDataUsageVisitor = aGenConnSettings.iCellularDataUsageVisitor;
     
     // Delete the old record
     for ( TInt i = 0; i < defConnRecordSet->iRecords.Count(); ++i )
@@ -2489,11 +2489,11 @@
     CLOG_WRITE_1( "Set wlan usage: [%d]", usageOfNewWlan );
     SET_INT_FIELD(dcRcd, KCDTIdUsageOfWlan, usageOfNewWlan );
 
-    CLOG_WRITE_1( "Set seamlessnessHome: [%d]", seamlessnessHome );
-    SET_INT_FIELD(dcRcd, KCDTIdSeamlessnessHome, seamlessnessHome );
+    CLOG_WRITE_1( "Set cellularDataUsageHome: [%d]", cellularDataUsageHome );
+    SET_INT_FIELD(dcRcd, KCDTIdCellularDataUsageHome, cellularDataUsageHome );
 
-    CLOG_WRITE_1( "Set seamlessnessVisitor: [%d]", seamlessnessVisitor );
-    SET_INT_FIELD(dcRcd, KCDTIdSeamlessnessVisitor, seamlessnessVisitor );
+    CLOG_WRITE_1( "Set cellularDataUsageVisitor: [%d]", cellularDataUsageVisitor );
+    SET_INT_FIELD(dcRcd, KCDTIdCellularDataUsageVisitor, cellularDataUsageVisitor );
 
     dcRcd->StoreL( Session() );    
     CleanupStack::PopAndDestroy( dcRcd );
@@ -2873,8 +2873,8 @@
     LOGGER_ENTERFN( "CCmManagerImpl::SetGenConnSettingsToDefault" );	
     	
     aGenConnSettings.iUsageOfWlan = ECmUsageOfWlanKnown;
-    aGenConnSettings.iSeamlessnessHome    = ECmSeamlessnessConfirmFirst;
-    aGenConnSettings.iSeamlessnessVisitor = ECmSeamlessnessConfirmFirst;
+    aGenConnSettings.iCellularDataUsageHome    = ECmCellularDataUsageAutomatic;
+    aGenConnSettings.iCellularDataUsageVisitor = ECmCellularDataUsageConfirm;
     }
 
 
Binary file cmmanager/cmmgr/Framework/conf/cmmanager.confml has changed
Binary file cmmanager/cmmgr/Framework/conf/cmmanager_10207376.crml has changed
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpluginwlan.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpluginwlan.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -68,7 +68,11 @@
 const TInt KWlanLastSocketClosedTimeout = -1;
 const TUint32 KEndOfArray = KMaxTUint;
 
-/// Modem bearer names for WLAN connection methods
+// Daemon manager name for Easy WLAN IAP
+_LIT( KHotspotDaemonManagerName, "NetCfgExtnHotSpot" );
+_LIT( KEasyWlanName, "Easy WLAN" );
+
+// Modem bearer names for WLAN connection methods
 _LIT( KModemBearerWLAN, "WLANBearer" );
 
 _LIT( KWlanFileIcons, "z:cmpluginwlan.mbm" );
@@ -2741,6 +2745,24 @@
     	    }
         delete daemonName;
         }
+       
+    // check if Easy WLAN IAP since it has different config daemon
+    // manager name
+    HBufC* iapName = GetStringAttributeL( ECmName );
+    if ( iapName )
+        {
+        CleanupStack::PushL( iapName );
+        if ( iapName->Compare( KEasyWlanName ) == 0 )
+            {
+            SetStringAttributeL( ECmConfigDaemonManagerName, 
+                                  KHotspotDaemonManagerName );
+            SetStringAttributeL( ECmConfigDaemonName, 
+                                   KConfigDaemonName );
+            CleanupStack::PopAndDestroy( iapName );
+            return;
+            }
+        CleanupStack::PopAndDestroy( iapName );
+        }
         
     // use DHCP if we can
     TBool ipfromSrv = GetBoolAttributeL( ECmIPAddFromServer );
--- a/cmmanager/cmmgr/database/inc/datamobilitycommsdattypes.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/cmmgr/database/inc/datamobilitycommsdattypes.h	Mon Jan 18 20:33:49 2010 +0200
@@ -456,8 +456,8 @@
 #define DEFCONN_TYPE _S("DefConnType")
 #define DEFCONN_UID _S("DefConnUId")
 #define USAGEOFWLAN _S("UsageOfWlan")
-#define SEAMLESSNESS_HOME _S("SeamlessnessHome")
-#define SEAMLESSNESS_VISITOR _S("SeamlessnessVisitor")
+#define CELLULAR_DATA_USAGE_HOME _S("CellularDataUsageHome")
+#define CELLULAR_DATA_USAGE_VISITOR _S("CellularDataUsageVisitor")
 
 NONSHARABLE_CLASS( CCDDefConnRecord ) : public CommsDat::CCDRecordBase
     {
@@ -476,8 +476,8 @@
     CommsDat::CMDBField<TUint> iDefConnType;
     CommsDat::CMDBField<TUint> iDefConnUid;    
     CommsDat::CMDBField<TUint> iUsageOfWlan;
-    CommsDat::CMDBField<TUint> iSeamlessnessHome;
-    CommsDat::CMDBField<TUint> iSeamlessnessVisitor;
+    CommsDat::CMDBField<TUint> iCellularDataUsageHome;
+    CommsDat::CMDBField<TUint> iCellularDataUsageVisitor;
     
     private:
     
--- a/cmmanager/cmmgr/database/src/cmmanagertableformats.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/cmmgr/database/src/cmmanagertableformats.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -97,8 +97,8 @@
 	X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iDefConnType,         TMDBNum )
 	X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iDefConnUid,          TMDBNum )
 	X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iUsageOfWlan,      TMDBNum )
-        X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iSeamlessnessHome,  TMDBNum )
-        X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iSeamlessnessVisitor,  TMDBNum )
+        X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iCellularDataUsageHome,  TMDBNum )
+        X_REGISTER_ATTRIBUTE( CCDDefConnRecord,   iCellularDataUsageVisitor,  TMDBNum )
     X_REGISTER_ATTRIBUTE( CCDRecordBase,      iRecordTag,           TMDBNum )
 	X_REGISTER_ATTRIBUTE( CCDRecordBase,      iRecordName,          TMDBText )
 END_ATTRIBUTE_TABLE()
@@ -110,8 +110,8 @@
     	{ KCDTIdDefConnType,         EUint32,    ENoAttrs, DEFCONN_TYPE },
     	{ KCDTIdDefConnUid,          EUint32,    ENoAttrs, DEFCONN_UID },
     	{ KCDTIdUsageOfWlan,         EUint32,    ENoAttrs, USAGEOFWLAN },
-    	{ KCDTIdSeamlessnessHome,     EUint32,    ENoAttrs,   SEAMLESSNESS_HOME },
-        { KCDTIdSeamlessnessVisitor,  EUint32,    ENoAttrs,   SEAMLESSNESS_VISITOR },    	
+    	{ KCDTIdCellularDataUsageHome,     EUint32,    ENoAttrs,   CELLULAR_DATA_USAGE_HOME },
+        { KCDTIdCellularDataUsageVisitor,  EUint32,    ENoAttrs,   CELLULAR_DATA_USAGE_VISITOR },    	
 	    { 0, 0, ENoAttrs, KCDNull }
   	};
   	
@@ -129,10 +129,10 @@
                         | KCDTIdDefConnUid ),
       iUsageOfWlan( ( aElementId & KCDMaskShowRecordType ) 
                         | KCDTIdUsageOfWlan ),
-      iSeamlessnessHome( ( aElementId & KCDMaskShowRecordType ) 
-                        | KCDTIdSeamlessnessHome ),
-      iSeamlessnessVisitor( ( aElementId & KCDMaskShowRecordType ) 
-                        | KCDTIdSeamlessnessVisitor )
+      iCellularDataUsageHome( ( aElementId & KCDMaskShowRecordType ) 
+                        | KCDTIdCellularDataUsageHome ),
+      iCellularDataUsageVisitor( ( aElementId & KCDMaskShowRecordType ) 
+                        | KCDTIdCellularDataUsageVisitor )
     {};  	
 
 EXPORT_C TMDBElementId 
@@ -157,10 +157,10 @@
                                 ENoAttrs,   DEFCONN_UID ),
         SGenericRecordTypeInfo( KCDTIdUsageOfWlan,  EUint32,    
                                 ENoAttrs,   USAGEOFWLAN ),
-        SGenericRecordTypeInfo( KCDTIdSeamlessnessHome,  EUint32,    
-                                ENoAttrs,   SEAMLESSNESS_HOME ),
-        SGenericRecordTypeInfo( KCDTIdSeamlessnessVisitor,  EUint32,    
-                                ENoAttrs,   SEAMLESSNESS_VISITOR ),
+        SGenericRecordTypeInfo( KCDTIdCellularDataUsageHome,  EUint32,    
+                                ENoAttrs,   CELLULAR_DATA_USAGE_HOME ),
+        SGenericRecordTypeInfo( KCDTIdCellularDataUsageVisitor,  EUint32,    
+                                ENoAttrs,   CELLULAR_DATA_USAGE_VISITOR ),
         SGenericRecordTypeInfo( 0, 0, ENoAttrs, KCDNull )
         };
 
--- a/cmmanager/gsconnsettingsplugin/src/gsconnsettingspluginmodel.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/src/gsconnsettingspluginmodel.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -116,8 +116,8 @@
 
     //Print out loaded settings
     OstTrace1( TRACE_NORMAL, CSP_LOADSETTINGSL_USAGE_OF_NEW_WLAN_PARAM_TRACE, "iSettings.iUsageOfWlan=%d", iSettings.iUsageOfWlan );
-    OstTrace1( TRACE_NORMAL, CSP_LOADSETTINGSL_SEAMLESSNESS_VISITOR_PARAM_TRACE, "iSeamlessnessVisitor=%d", iSettings.iSeamlessnessVisitor );
-    OstTrace1( TRACE_NORMAL, CSP_LOADSETTINGSL_SEAMLESSNESS_HOME_PARAM_TRACE, "iSettings.iSeamlessnessHome=%d", iSettings.iSeamlessnessHome );
+    OstTrace1( TRACE_NORMAL, CSP_LOADSETTINGSL_CELLULAR_DATA_USAGE_VISITOR_PARAM_TRACE, "iSettings.iCellularDataUsageVisitor=%d", iSettings.iCellularDataUsageVisitor );
+    OstTrace1( TRACE_NORMAL, CSP_LOADSETTINGSL_CELLULAR_DATA_USAGE_HOME_PARAM_TRACE, "iSettings.iCellularDataUsageHome=%d", iSettings.iCellularDataUsageHome );
     }
 
 // ----------------------------------------------------------------------------
@@ -136,8 +136,8 @@
 
     //Print out saved settings
     OstTrace1( TRACE_NORMAL, CSP_SAVESETTINGSL_USAGE_OF_NEW_WLAN_PARAM_TRACE, "iSettings.iUsageOfWlan=%d", iSettings.iUsageOfWlan );
-    OstTrace1( TRACE_NORMAL, CSP_SAVESETTINGSL_SEAMLESSNESS_VISITOR_PARAM_TRACE, "iSeamlessnessVisitor=%d", iSettings.iSeamlessnessVisitor );
-    OstTrace1( TRACE_NORMAL, CSP_SAVESETTINGSL_SEAMLESSNESS_HOME_PARAM_TRACE, "iSettings.iSeamlessnessHome=%d", iSettings.iSeamlessnessHome );
+    OstTrace1( TRACE_NORMAL, CSP_SAVESETTINGSL_CELLULAR_DATA_USAGE_VISITOR_PARAM_TRACE, "iSettings.iCellularDataUsageVisitor=%d", iSettings.iCellularDataUsageVisitor );
+    OstTrace1( TRACE_NORMAL, CSP_SAVESETTINGSL_CELLULAR_DATA_USAGE_HOME_PARAM_TRACE, "iSettings.iCellularDataUsageHome=%d", iSettings.iCellularDataUsageHome );
     }
 
 // ----------------------------------------------------------------------------
@@ -178,19 +178,18 @@
     TInt mappedValue = 0;
 
     //Map to correct index    
-    switch ( iSettings.iSeamlessnessVisitor )
+    switch ( iSettings.iCellularDataUsageVisitor )
         {
-        case ECmSeamlessnessShowprogress:
-        case ECmSeamlessnessFullySeamless:
-            mappedValue = EDataUsageAbroadAutomatic; //Automatic
+        case ECmCellularDataUsageAutomatic:
+            mappedValue = EDataUsageAbroadAutomatic; // Automatic
             break;
 
-        case ECmSeamlessnessConfirmFirst:
-            mappedValue = EDataUsageAbroadConfirm; //Confirm
+        case ECmCellularDataUsageConfirm:
+            mappedValue = EDataUsageAbroadConfirm; // Confirm
             break;
 
-        case ECmSeamlessnessDisabled:
-            mappedValue = EDataUsageAbroadWlanOnly; //Wlan only
+        case ECmCellularDataUsageDisabled:
+            mappedValue = EDataUsageAbroadWlanOnly; // Wlan only
             break;
 
         default:
@@ -210,19 +209,18 @@
     TInt mappedValue = 0;
 
     //Map to correct index    
-    switch ( iSettings.iSeamlessnessHome )
+    switch ( iSettings.iCellularDataUsageHome )
         {
-        case ECmSeamlessnessShowprogress:
-        case ECmSeamlessnessFullySeamless:
-            mappedValue = EDataUsageHomeNwAutomatic; //Automatic
+        case ECmCellularDataUsageAutomatic:
+            mappedValue = EDataUsageHomeNwAutomatic; // Automatic
             break;
 
-        case ECmSeamlessnessConfirmFirst:
-            mappedValue = EDataUsageHomeNwConfirm; //Confirm
+        case ECmCellularDataUsageConfirm:
+            mappedValue = EDataUsageHomeNwConfirm; // Confirm
             break;
 
-        case ECmSeamlessnessDisabled:
-            mappedValue = EDataUsageHomeNwWlanOnly; //Wlan only
+        case ECmCellularDataUsageDisabled:
+            mappedValue = EDataUsageHomeNwWlanOnly; // Wlan only
             break;
 
         default:
@@ -266,14 +264,14 @@
     switch ( aValue )
         {
         case EDataUsageAbroadAutomatic:  //Automatic
-            iSettings.iSeamlessnessVisitor = ECmSeamlessnessShowprogress; 
+            iSettings.iCellularDataUsageVisitor = ECmCellularDataUsageAutomatic; 
             break;
         case EDataUsageAbroadConfirm: //Confirm
-            iSettings.iSeamlessnessVisitor = ECmSeamlessnessConfirmFirst;
+            iSettings.iCellularDataUsageVisitor = ECmCellularDataUsageConfirm;
             break;
 
         case EDataUsageAbroadWlanOnly: //Wlan only
-            iSettings.iSeamlessnessVisitor = ECmSeamlessnessDisabled;
+            iSettings.iCellularDataUsageVisitor = ECmCellularDataUsageDisabled;
             break;
                         
         default:
@@ -292,15 +290,15 @@
     switch ( aValue )
         {
         case EDataUsageHomeNwAutomatic: //Automatic
-            iSettings.iSeamlessnessHome = ECmSeamlessnessShowprogress; 
+            iSettings.iCellularDataUsageHome = ECmCellularDataUsageAutomatic; 
             break;
 
         case EDataUsageHomeNwConfirm: //Confirm
-            iSettings.iSeamlessnessHome = ECmSeamlessnessConfirmFirst;
+            iSettings.iCellularDataUsageHome = ECmCellularDataUsageConfirm;
             break;
 
         case EDataUsageHomeNwWlanOnly: //Wlan only
-            iSettings.iSeamlessnessHome = ECmSeamlessnessDisabled;
+            iSettings.iCellularDataUsageHome = ECmCellularDataUsageDisabled;
             break;
                         
         default:
--- a/cmmanager/gsconnsettingsplugin/traces/OstTraceDefinitions.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/traces/OstTraceDefinitions.h	Mon Jan 18 20:33:49 2010 +0200
@@ -1,20 +1,3 @@
-/*
-* Copyright (c) 2009 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"
-* 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: 
-*
-*/
-
 #ifndef __OSTTRACEDEFINITIONS_H__
 #define __OSTTRACEDEFINITIONS_H__
 #include <opensystemtrace.h>
--- a/cmmanager/gsconnsettingsplugin/traces/gsconnsettingspluginmodelTraces.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/traces/gsconnsettingspluginmodelTraces.h	Mon Jan 18 20:33:49 2010 +0200
@@ -1,4 +1,4 @@
-// Created by TraceCompiler1.1.6
+// Created by TraceCompiler 1.3.1
 // DO NOT EDIT, CHANGES WILL BE LOST
 
 #ifndef __GSCONNSETTINGSPLUGINMODELTRACES_H__
@@ -6,14 +6,12 @@
 
 #define KOstTraceComponentID 0x200255b8
 
-#define CSP_LOADSETTINGSL_USAGE_OF_NEW_WLAN_PARAM_TRACE 0x30002
-#define CSP_LOADSETTINGSL_FORCED_ROAMING_PARAM_TRACE 0x30003
-#define CSP_LOADSETTINGSL_SEAMLESSNESS_VISITOR_PARAM_TRACE 0x30004
-#define CSP_LOADSETTINGSL_SEAMLESSNESS_HOME_PARAM_TRACE 0x30005
-#define CSP_SAVESETTINGSL_USAGE_OF_NEW_WLAN_PARAM_TRACE 0x30007
-#define CSP_SAVESETTINGSL_FORCED_ROAMING_PARAM_TRACE 0x30008
-#define CSP_SAVESETTINGSL_SEAMLESSNESS_VISITOR_PARAM_TRACE 0x30009
-#define CSP_SAVESETTINGSL_SEAMLESSNESS_HOME_PARAM_TRACE 0x3000a
+#define CSP_LOADSETTINGSL_USAGE_OF_NEW_WLAN_PARAM_TRACE 0x30001
+#define CSP_SAVESETTINGSL_USAGE_OF_NEW_WLAN_PARAM_TRACE 0x30004
+#define CSP_LOADSETTINGSL_CELLULAR_DATA_USAGE_VISITOR_PARAM_TRACE 0x30007
+#define CSP_LOADSETTINGSL_CELLULAR_DATA_USAGE_HOME_PARAM_TRACE 0x30008
+#define CSP_SAVESETTINGSL_CELLULAR_DATA_USAGE_VISITOR_PARAM_TRACE 0x30009
+#define CSP_SAVESETTINGSL_CELLULAR_DATA_USAGE_HOME_PARAM_TRACE 0x3000a
 
 
 #endif
--- a/connectionmonitoring/connectionmonitorui/help/inc/cmon.hlp.hrh	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/help/inc/cmon.hlp.hrh	Mon Jan 18 20:33:49 2010 +0200
@@ -2,9 +2,9 @@
 * Copyright (c) 2009 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 "Symbian Foundation License v1.0"
+* under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
-* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
--- a/connectionmonitoring/connectionmonitorui/inc/ConnectionInfoBase.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/inc/ConnectionInfoBase.h	Mon Jan 18 20:33:49 2010 +0200
@@ -193,6 +193,13 @@
         TConnectionStatus GetStatus() const;
 
         /**
+        * Refresh status of connection
+        * @param aConnectionStatus new status of connection
+        */
+        void RefreshConnectionStatus( 
+                                   const TInt aConnectionStatus );
+
+        /**
         * Gives back the name of connection 
         * @return the name of connection 
         */
@@ -261,13 +268,6 @@
         void RefreshConnectionStatus();
 
         /**
-        * Refresh status of connection
-        * @param aConnectionStatus new status of connection
-        */
-        void RefreshConnectionStatus( 
-                                   const TConnectionStatus aConnectionStatus );
-
-        /**
         * Refresh amount of sent and received data of connection
         */
         void RefreshSentReceivedDataL();
--- a/connectionmonitoring/connectionmonitorui/inc/ConnectionMonitorUiDetailsView.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/inc/ConnectionMonitorUiDetailsView.h	Mon Jan 18 20:33:49 2010 +0200
@@ -50,7 +50,7 @@
         * @param aConnectionArray array containing connection list
         */
         CConnectionMonitorUiDetailsView( 
-                              const CConnectionArray* const aConnectionArray );
+                               CConnectionArray* const aConnectionArray );
 
         /**
         * EPOC second phase constructor.
@@ -136,7 +136,7 @@
         /**
         * Array contains connections
         */
-        const CConnectionArray* const           iConnectionArray; // Not Owned.
+        CConnectionArray* const           iConnectionArray; // Not Owned.
 
         /**
         * The index of selected connection
--- a/connectionmonitoring/connectionmonitorui/src/ConnectionInfoBase.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionInfoBase.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -216,13 +216,7 @@
 //
 CDesCArrayFlat* CConnectionInfoBase::GetDetailsArray() const
     {
-    CDesCArrayFlat* array = NULL;
-    if ( ( iConnectionStatus == EConnectionSuspended ) ||
-         ( iConnectionStatus == EConnectionCreated ) )
-        {
-        array = iDetailsArray;
-        }
-    return array;
+    return iDetailsArray;
     }
 
 // ---------------------------------------------------------
@@ -301,7 +295,7 @@
 // ---------------------------------------------------------
 //
 void CConnectionInfoBase::RefreshConnectionStatus(
-                                   const TConnectionStatus aConnectionStatus )
+                                   const TInt aConnectionStatus )
     {
     CMUILOGGER_ENTERFN( "RefreshConnectionStatus" );
     CMUILOGGER_WRITE_F( "RefreshConnectionStatus aConnectionStatus %d",
@@ -317,9 +311,8 @@
         CMUILOGGER_WRITE("1");
         iConnectionStatus = EConnectionCreated;
         }
-    else if ( ( iConnectionStatus == EConnectionClosing ) &&
-              ( ( aConnectionStatus == KConnectionClosed ) ||
-                ( aConnectionStatus == KLinkLayerClosed ) ) ) 
+    else if ( ( aConnectionStatus == KConnectionClosed ) ||
+              ( aConnectionStatus == KLinkLayerClosed ) ) 
         {
         CMUILOGGER_WRITE("2");        
         iConnectionStatus = EConnectionClosed;
--- a/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiAppUi.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiAppUi.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -22,6 +22,7 @@
 #include <aknnotedialog.h>
 #include <AknUtils.h>
 #include <cmmanagerext.h>
+#include <NIFVAR.H>
 #include <ConnectionMonitorUi.rsg>
 #include "ConnectionMonitorUi.hrh"
 #include "ConnectionMonitorUiAppUi.h"
@@ -317,13 +318,11 @@
                 connectionInfo = ( *iConnectionArray )[index]; 
             
                 if ( iView->Id() == KDetailsViewId )
-                    {
-                    CConnectionMonitorUiDetailsView* view = (CConnectionMonitorUiDetailsView*) iView;
-                    if ( view->GetSelectedConnection() == ((TUint) index) )
-                        {
-                        view->CloseViewL();
-                        activateMainView = ETrue;
-                        }
+                    {               
+                        // Mark the connection as closed and refresh details view.
+                        // It will change the status there.
+                        connectionInfo->RefreshConnectionStatus( KConnectionClosed );
+                        connectionInfo->RefreshDetailsArrayL();                        
                     }
                 else // MainView
                     {
@@ -332,8 +331,10 @@
                         {
                         ShowConnectionSummaryInformationNoteL( connectionInfo );
                         }
-                    }
-                iConnectionArray->Delete( connectionId );
+                    // Mark the connection as closed. When the timer ticks the next
+                    // time the marked connection is deleted and removed from the main view.
+                    connectionInfo->RefreshConnectionStatus( KConnectionClosed );
+                    }                
                 CMUILOGGER_WRITE_F( "Deleted: %d", connectionId );
                 }
             break;
@@ -601,6 +602,28 @@
 //
 void CConnectionMonitorUiAppUi::OnTimerExpiredL()
     {
+    CMUILOGGER_WRITE_F( "MdcaCount: %d", iConnectionArray->MdcaCount());
+    // First check if there are connections that need to be deleted.
+    // The conditions for deletion are:
+    // 1. Connection status must be closed
+    // 2. Main view must be active (details view should be shown also for closed connections)
+    // 3. There must not be active request ongoing (otherwise deletion might cause crash)    
+    for(TUint i = 0; i < iConnectionArray->MdcaCount(); i++)
+       {
+       CMUILOGGER_WRITE_F( "i: %d", i );
+       CMUILOGGER_WRITE_F( "Status: %d", (*iConnectionArray)[i]->GetStatus() );
+       CMUILOGGER_WRITE_F( "active: %d", iActiveWrapper->IsActive() );
+       if( (*iConnectionArray)[i]->GetStatus() == EConnectionClosed 
+            && !iActiveWrapper->IsActive()
+            && iView->Id() != KDetailsViewId)
+           {
+           CMUILOGGER_WRITE_F( "Delete conn id: %d", (*iConnectionArray)[i]->GetConnectionId() );
+           iConnectionArray->Delete( (*iConnectionArray)[i]->GetConnectionId() );
+           i--;
+           }
+       }
+    
+    
     TInt count = iNewConnectionIdArray.Count();
     if ( count > 0 )
         {
--- a/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsContainer.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsContainer.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -317,40 +317,9 @@
         {
         case EConnMonDeleteConnection:
             {
-            if ( aIndex == iConnectionIndex )
-                {
-                TUint count = iConnectionArray->MdcaCount();
-                switch ( count )
-                    {
-                    case 0:
-                        {
-                        iListBox->Model()->SetItemTextArray(
-                                           new (ELeave) CDesCArrayFlat( 1 ) );
-                        iListBox->Model()->SetOwnershipType(
-                                                          ELbmOwnsItemArray );
-                        iConnectionIndex = 0;
-                        iConnectionInfo = NULL;
-                        break;
-                        }
-                    case 1:
-                        {
-                        SetSelectedConnectionL( 0 );
-                        break;
-                        }
-                    default :
-                        {
-                        TInt index = iConnectionIndex < count ?
-                                                        iConnectionIndex :
-                                                        iConnectionIndex - 1;
-                        SetSelectedConnectionL( index );
-                        break;
-                        }
-                    }
-                iListBox->DrawNow();
-                iListBox->UpdateScrollBarsL();
-                }
-            break;
+            // Do nothing
             }
+            break;            
         case EConnMonCreateConnection:
             {
         CMUILOGGER_WRITE_F( "iConnectionInfo : %d", iConnectionInfo );
@@ -388,14 +357,13 @@
     if ( iConnectionArray->MdcaCount() )
        {
         iListBox->DrawNow();
-        iListBox->UpdateScrollBarsL();
+
         CMUILOGGER_WRITE_F( "CMUIDW GetStatus() before: %d", 
                             iConnectionInfo->GetStatus() );
         if ( iConnectionInfo->GetStatus() == EConnectionClosing )
             {
             CConnectionMonitorUiAppUi* tempApUi = 
                         CConnectionMonitorUiAppUi::Static();
-            tempApUi->StopTimer();
             iConnectionInfo->StatusChangedL();
             }
         CMUILOGGER_WRITE_F( "CMUIDW GetStatus() after: %d",
@@ -447,7 +415,8 @@
 //
 void CConnectionMonitorUiDetailsContainer::PushAndRefreshNaviPaneL()
     {
-    TUint countOfConnection = iConnectionArray->NumberOfActiveConnections();
+    TUint countOfConnection = iConnectionArray->MdcaCount();
+    
     CMUILOGGER_WRITE_F( "countOfConnection : %d", countOfConnection );
     
     if ( ( iConnectionIndex > countOfConnection ) && // spec. index update
--- a/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsView.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsView.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -31,7 +31,7 @@
 // ---------------------------------------------------------
 //
 CConnectionMonitorUiDetailsView::CConnectionMonitorUiDetailsView( 
-                             const CConnectionArray* const aConnectionArray )
+                             CConnectionArray* const aConnectionArray )
     : CAknView(), 
       iConnectionArray( aConnectionArray ), 
       iViewRefreshState( EFalse )
@@ -93,6 +93,8 @@
 //
 void CConnectionMonitorUiDetailsView::CloseViewL()
     {   
+    CMUILOGGER_ENTERFN( "CConnectionMonitorUiDetailsView::CloseViewL" );    
+    
     if ( GetViewRefreshState() )
         {
         // Now delete this view
@@ -101,6 +103,7 @@
         appUi->StartTimerL();
         SetViewRefreshState( EFalse );
         }
+    CMUILOGGER_LEAVEFN( "CConnectionMonitorUiDetailsView::CloseViewL" );
     }
 
 // ---------------------------------------------------------
--- a/connectionmonitoring/connmon/connectionmonitor/group/ConnMon.mmp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/group/ConnMon.mmp	Mon Jan 18 20:33:49 2010 +0200
@@ -56,6 +56,7 @@
 SOURCE          connmondtmnoti.cpp
 
 SOURCE          ConnMonBearerNotifier.cpp ConnMonEGprsNotifier.cpp ConnMonHsdpaNotifier.cpp
+SOURCE          cellulardatausagekeyupdater.cpp
 
 
 USERINCLUDE     ../inc
--- a/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonIAP.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonIAP.h	Mon Jan 18 20:33:49 2010 +0200
@@ -642,6 +642,15 @@
          * (weak signal, no WLAN connection, WLAN not supported... ).
          */
         TBool WlanRssGoodEnough();
+        
+        /**
+         * Gets the network roaming status.
+         * @since
+         * @param aNetworkStatus On return, contains the current network registration status.
+         * @return KErrNone if successfull, otherwise a system wide error code.
+         */
+        TInt GetNetworkRegistration_v2( TInt& aRegistration ) const;
+
 
     private: // New methods
         /**
@@ -742,14 +751,6 @@
         TInt GetNetworkRegistration( TInt& aRegistration ) const;
 
         /**
-         * Gets the network roaming status.
-         * @since
-         * @param aNetworkStatus On return, contains the current network registration status.
-         * @return KErrNone if successfull, otherwise a system wide error code.
-         */
-        TInt GetNetworkRegistration_v2( TInt& aRegistration ) const;
-
-        /**
          * Gets the GSM signal strength.
          * @since
          * @param aSignalStrength On return, contains the GSM signal strength in dBs.
--- a/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonServ.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonServ.h	Mon Jan 18 20:33:49 2010 +0200
@@ -133,6 +133,7 @@
 class TConnMonIapInfo;
 class TConnMonSNAPInfo;
 class TConnMonId;
+class CCellularDataUsageKeyUpdater;
 
 /**
 * CConnMonServer
@@ -326,6 +327,13 @@
         {
         return iBearerGroupManager;
         }
+    
+    /**
+     * Gets a pointer to the iap module.
+     * @return A pointer to the iap module.
+     */
+    inline CCellularDataUsageKeyUpdater* CellularDataUsageKeyUpdater() 
+                     { return iCellularDataUsageKeyUpdater; }
 
 public:
     /**
@@ -367,7 +375,8 @@
     CConnMonCommsDatNotifier* iSnapTableNotifier;
     CConnMonCommsDatNotifier* iVirtualTableNotifier;
 
-    CConnMonBearerGroupManager* iBearerGroupManager;
+    CConnMonBearerGroupManager*   iBearerGroupManager;
+    CCellularDataUsageKeyUpdater* iCellularDataUsageKeyUpdater;
     };
 
 /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/inc/cellulardatausagekeyupdater.h	Mon Jan 18 20:33:49 2010 +0200
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2008-2009 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:  Listens for changes in one CommsDat table through CenRep.
+*
+*/
+
+#ifndef CELLULARDATAUSAGEKEYUPDATER_H
+#define CELLULARDATAUSAGEKEYUPDATER_H
+
+class CConnMonServer;
+class CRepository;
+class TCmGenConnSettings;
+
+// Stop requesting new notifications after this many consecutive errors
+const TInt KCenRepErrorRetryCount = 80;
+
+NONSHARABLE_CLASS( CCellularDataUsageKeyUpdater ) : public CActive
+    {
+public:
+    static CCellularDataUsageKeyUpdater* NewL(
+            CConnMonServer* aServer );
+
+    static CCellularDataUsageKeyUpdater* NewLC(
+            CConnMonServer* aServer );
+
+    virtual ~CCellularDataUsageKeyUpdater();
+    
+    void UpdateKeyL( const TInt aRegistration ) const;
+
+private:
+    CCellularDataUsageKeyUpdater(
+            CConnMonServer* aServer );
+
+    void ConstructL();
+    TInt RequestNotifications();
+    
+    TCmGenConnSettings ReadGenConnSettingsL() const;
+    TInt GetNetworkRegistration( TInt& aRegistration ) const;
+    void UpdateKeyL() const;
+
+private: // Methods from base class
+    void DoCancel();
+    void RunL();
+
+private:
+    CConnMonServer* iServer;
+    TUint32         iTableId;
+    CRepository*    iRepository;
+    TInt            iErrorCounter;
+    // used for complete runl. Not owned.
+    TRequestStatus* iInitStatus;
+    };
+
+#endif // CELLULARDATAUSAGEKEYUPDATER_H
+
+// End-of-file
--- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonNoti.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonNoti.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -28,6 +28,7 @@
 #include "ConnMonIAP.h"
 #include "ConnMonNoti.h"
 #include "ConnMonAvailabilityManager.h"
+#include "cellulardatausagekeyupdater.h"
 #include "log.h"
 
 // ============================ MEMBER FUNCTIONS ===============================
@@ -974,6 +975,11 @@
 
             // Store to compare next event correctly
             iEventInfo.iData = value;
+            
+            // Update KCurrentCellularDataUsage -key in Repository KCRUidCmManage.
+            // Key tells applications whether it is allowed to use packet data or not.
+            TRAP_IGNORE( iServer->CellularDataUsageKeyUpdater()->UpdateKeyL(
+                iServer->Iap()->CalculateNetworkRegistration_v2( iRegistration ) ); )
             }
         LOGIT("CNetwRegistrationNotifier::RunL triggered HandleAvailabilityChange()")
         iServer->AvailabilityManager()->HandleAvailabilityChange();
--- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -33,6 +33,7 @@
 #include "ConnMonBearerWLAN.h"
 #include "ConnMonBearerGroupManager.h"
 #include "connmoncommsdatnotifier.h"
+#include "cellulardatausagekeyupdater.h"
 
 // ============================ LOCAL FUNCTIONS ===============================
 
@@ -318,7 +319,10 @@
     // Bearer group manager
     iBearerGroupManager = CConnMonBearerGroupManager::NewL();
     LOGIT("ConstructL: Bearer group manager constructed")
-
+    
+    iCellularDataUsageKeyUpdater = CCellularDataUsageKeyUpdater::NewL( this );
+    LOGIT("ConstructL: CCellularDataUsageKeyUpdater constructed")
+    
     // Identify ourselves and open for service
     StartL( KConnectionMonitorServerName );
 
@@ -368,6 +372,8 @@
 
     // Bearer Group Manager
     delete iBearerGroupManager;
+    
+    delete iCellularDataUsageKeyUpdater;
 
     FeatureManager::UnInitializeLib();
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2009 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:  Keeps KCurrentCellularDataUsage -key 
+*               in Repository KCRUidCmManager up-to-date based
+*               on current network registration status and
+*               iCellularDataUsageHome and iCellularDataUsageVisitor keys.  
+*/
+
+#include <commsdat.h>
+#include <centralrepository.h>
+#include <cmmanager.h>
+#include <cmmanagerkeys.h>
+#include <cmgenconnsettings.h>
+#include <rconnmon.h>
+#include <datamobilitycommsdattypes.h>
+#include <cmpluginbaseeng.h>
+
+#include "cellulardatausagekeyupdater.h"
+#include "ConnMonServ.h"
+#include "ConnMonIap.h"
+#include "ConnMonDef.h"
+#include "log.h"
+
+// Repository for CommsDat
+const TUid KCDCommsRepositoryId = { 0xCCCCCC00 };
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::NewL
+// -----------------------------------------------------------------------------
+//
+CCellularDataUsageKeyUpdater* CCellularDataUsageKeyUpdater::NewL( 
+	    CConnMonServer* aServer )
+    {
+    CCellularDataUsageKeyUpdater* self = 
+             CCellularDataUsageKeyUpdater::NewLC( aServer );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::NewLC
+// -----------------------------------------------------------------------------
+//
+CCellularDataUsageKeyUpdater* CCellularDataUsageKeyUpdater::NewLC( 
+        CConnMonServer* aServer )
+    {
+    CCellularDataUsageKeyUpdater* self = 
+             new( ELeave ) CCellularDataUsageKeyUpdater( aServer );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::~CCellularDataUsageKeyUpdater
+// -----------------------------------------------------------------------------
+//
+CCellularDataUsageKeyUpdater::~CCellularDataUsageKeyUpdater()
+    {
+    // Cancel outstanding request, if exists
+    Cancel();
+    delete iRepository;
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::UpdateKeyL
+// -----------------------------------------------------------------------------
+//
+void CCellularDataUsageKeyUpdater::UpdateKeyL( const TInt aRegistration ) const
+    {
+    LOGENTRFN("CCellularDataUsageKeyUpdater::UpdateKeyL()")
+    LOGIT1("CCellularDataUsageKeyUpdater::UpdateKeyL: aRegistration <%d>", 
+            aRegistration)
+                
+    TCmGenConnSettings occSettings = ReadGenConnSettingsL();
+  
+    TInt value( occSettings.iCellularDataUsageHome );
+        
+    if ( aRegistration == ENetworkRegistrationExtRoamingInternational )
+        {           
+        value = occSettings.iCellularDataUsageVisitor;
+        }
+
+    CRepository* cmRepository = NULL;
+    
+    TRAPD( err, cmRepository = CRepository::NewL( KCRUidCmManager ) )
+    
+    if ( err == KErrNone )
+        {
+        TInt previous( 0 );
+        TInt err = cmRepository->Get( KCurrentCellularDataUsage, previous );
+           
+        if ( err == KErrNone && ( value != previous ) )
+            {
+            cmRepository->Set( KCurrentCellularDataUsage, value );
+            LOGIT1("KCurrentCellularDataUsage set to <%d>", value)
+            }    
+        delete cmRepository;    
+        }
+    else
+        {
+        LOGIT1("CCRepository::NewL( KCRUidCmManager ) FAILED <%d>", err)
+        }
+
+    LOGEXITFN("CCellularDataUsageKeyUpdater::UpdateKeyL()")
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::CCellularDataUsageKeyUpdater
+// -----------------------------------------------------------------------------
+//
+CCellularDataUsageKeyUpdater::CCellularDataUsageKeyUpdater( CConnMonServer* aServer )
+        :
+        CActive( EConnMonPriorityNormal ),
+        iServer( aServer )
+    {
+    iRepository = NULL;
+    iErrorCounter = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CCellularDataUsageKeyUpdater::ConstructL()
+    {
+    iRepository = CRepository::NewL( KCDCommsRepositoryId );
+    
+    // Find out Default connection table id.
+    // It contains iCellularDataUsageHome and iCellularDataUsageVisitor keys.
+    CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() );	
+    TRAPD( err, iTableId = CCDDefConnRecord::TableIdL( *db ) )
+    	
+    if ( err )
+        {
+        LOGIT1("ERROR, CCDDefConnRecord::TableIdL() <%d>", err)
+        // Default connection table did not exist. 
+        // Try once more because CMManager might have created it.
+        iTableId = CCDDefConnRecord::TableIdL( *db );          	
+        }
+    CleanupStack::PopAndDestroy( db );
+    	    
+    CActiveScheduler::Add( this );
+    
+    // Initialize later asynchronously and let ConnMonServ continue now
+    SetActive(); 
+    iInitStatus = &iStatus;
+    User::RequestComplete( iInitStatus, KErrNone );
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::RequestNotifications
+// -----------------------------------------------------------------------------
+//
+TInt CCellularDataUsageKeyUpdater::RequestNotifications()
+    {  	    	
+    LOGIT1("Calling iRepository->NotifyRequest() for table 0x%08X", iTableId)
+    TInt err = iRepository->NotifyRequest( iTableId, KCDMaskShowRecordType, iStatus );
+
+    if ( err == KErrNone )
+        {
+        SetActive();
+        }
+    else
+        {
+        LOGIT1("ERROR, iRepository->NotifyRequest() <%d>", err)
+        }
+
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CCellularDataUsageKeyUpdater::DoCancel()
+    {
+    iRepository->NotifyCancel( iTableId, KCDMaskShowRecordType );
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::RunL
+// -----------------------------------------------------------------------------
+//
+void CCellularDataUsageKeyUpdater::RunL()
+    {
+    LOGIT(".")
+    LOGIT2("RunL: CCellularDataUsageKeyUpdater 0x%08X, 0x%08X", 
+            iTableId, iStatus.Int())
+
+    if ( iStatus.Int() < KErrNone )
+        {
+        LOGIT1("CCellularDataUsageKeyUpdater::RunL: error <%d>", iStatus.Int())
+        iErrorCounter++;
+        if ( iErrorCounter > KCenRepErrorRetryCount )
+            {
+            LOGIT1("Over %d consecutive errors, stopping notifications permanently", 
+                   KCenRepErrorRetryCount)
+            return;
+            }
+        }
+    else
+        {
+        iErrorCounter = 0;
+        
+        TRAPD( leaveCode, UpdateKeyL() )
+    
+        if ( leaveCode )
+            {
+            LOGIT1("CCellularDataUsageKeyUpdater::RunL: LEAVE <%d>", leaveCode)
+            }
+        }
+
+    RequestNotifications();
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::ReadGenConnSettings
+// -----------------------------------------------------------------------------
+//
+TCmGenConnSettings CCellularDataUsageKeyUpdater::ReadGenConnSettingsL() const
+    {
+    TCmGenConnSettings cmGenConnSettings;
+    
+    CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() );
+    
+    CMDBRecordSet<CCDDefConnRecord>* defConnRecordSet = 
+        new ( ELeave ) CMDBRecordSet<CCDDefConnRecord>( iTableId );
+    CleanupStack::PushL( defConnRecordSet );
+     
+    defConnRecordSet->LoadL( *db );
+
+    TInt value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], 
+                 KCDTIdUsageOfWlan );
+    cmGenConnSettings.iUsageOfWlan = TCmUsageOfWlan( value );
+
+    value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], 
+                             KCDTIdCellularDataUsageHome );
+    cmGenConnSettings.iCellularDataUsageHome = TCmCellularDataUsage( value );
+    LOGIT1("cmGenConnSettings.iCellularDataUsageHome <%d>", 
+            cmGenConnSettings.iCellularDataUsageHome)
+
+    value = QUERY_INT_FIELD( defConnRecordSet->iRecords[0], 
+                             KCDTIdCellularDataUsageVisitor );
+    cmGenConnSettings.iCellularDataUsageVisitor = TCmCellularDataUsage( value );
+    LOGIT1("cmGenConnSettings.iCellularDataUsageVisitor <%d>", 
+            cmGenConnSettings.iCellularDataUsageVisitor)
+            
+    CleanupStack::PopAndDestroy( defConnRecordSet );	
+    CleanupStack::PopAndDestroy( db );	
+    
+    return cmGenConnSettings;
+    }
+
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::GetNetworkRegistration
+// -----------------------------------------------------------------------------
+//
+TInt CCellularDataUsageKeyUpdater::GetNetworkRegistration( TInt& aRegistration ) const
+    {
+    return iServer->Iap()->GetNetworkRegistration_v2( aRegistration );
+    }
+    
+// -----------------------------------------------------------------------------
+// CCellularDataUsageKeyUpdater::UpdateKeyL
+// -----------------------------------------------------------------------------
+//
+void CCellularDataUsageKeyUpdater::UpdateKeyL() const
+    {
+    TInt registration( ENetworkRegistrationExtHomeNetwork );
+    TInt err( KErrNone );
+    	
+#ifndef __WINSCW__  // emulator does not support cellular network    	
+    err = GetNetworkRegistration( registration );
+#endif
+    
+    if ( err == KErrNone )
+        {
+        UpdateKeyL( registration );
+        }
+    else
+        {
+        LOGIT1("GetNetworkRegistration failed: <%d>", err );
+        }
+    }
+
+// End-of-file
--- a/connectionmonitoring/connmon/dataconnectionlogger/src/saeobserver.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/connectionmonitoring/connmon/dataconnectionlogger/src/saeobserver.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -261,23 +261,33 @@
         User::WaitForRequest( status );
         LOG( Log::Printf( _L("+ DCL: Async call status==(%d)."), status.Int() ));
 
-        if ( (ntwStatus == EConnMonStatusNotAvailable) || (ntwStatus == EConnMonStatusUnattached) )
-            {
-            LOG( Log::Printf( _L("DCL: GPRS ntwk is UnAttached." )));
-            iNetworkIsUnAttached = ETrue;
-            NotifyPubSub( KPSUidGprsStatus, EPSGprsUnattached );
-            }
-        else if ( ntwStatus == ENtwkStatusNotKnown )
+        switch ( ntwStatus )
             {
-            LOG( Log::Printf( _L("DCL: Async request for GPRS ntwk status failed %d!"),
-                 status.Int() ));
+            case ENtwkStatusNotKnown:
+                LOG( Log::Printf( _L("DCL: Async request for GPRS ntwk status failed %d!"),
+                     status.Int() ));
+                break;
+                
+            case EConnMonStatusNotAvailable:
+            case EConnMonStatusUnattached:
+                LOG( Log::Printf( _L("DCL: GPRS ntwk is UnAttached." )));
+                iNetworkIsUnAttached = ETrue;
+                NotifyPubSub( KPSUidGprsStatus, EPSGprsUnattached );
+                break;
+                
+            case EConnMonStatusActive:
+                LOG( Log::Printf( _L("DCL: GPRS ntwk is Active." )));
+                iNetworkIsUnAttached = EFalse;
+                NotifyPubSub( KPSUidGprsStatus, EPSGprsContextActive );
+                break;
+                
+            case EConnMonStatusAttached:
+            default:
+                LOG( Log::Printf( _L("DCL: GPRS ntwk is Attached." )));
+                iNetworkIsUnAttached = EFalse;
+                NotifyPubSub( KPSUidGprsStatus, EPSGprsAttach );
             }
-        else
-            {
-            LOG( Log::Printf( _L("DCL: GPRS ntwk is Attached." )));
-            iNetworkIsUnAttached = EFalse;
-            NotifyPubSub( KPSUidGprsStatus, EPSGprsAttach );
-            }
+        
         }
     else if ( connType == ESAEWCDMAConnectionType )
         {
@@ -285,23 +295,33 @@
         User::WaitForRequest( status );
         LOG( Log::Printf( _L("+ DCL: Async call status==(%d)."), status.Int() ));
 
-        if ( (ntwStatus == EConnMonStatusNotAvailable) || (ntwStatus == EConnMonStatusUnattached) )
-            {
-            LOG( Log::Printf( _L("DCL: WCDMA ntwk is UnAttached." )));
-            iNetworkIsUnAttached = ETrue;
-            NotifyPubSub( KPSUidWcdmaStatus, EPSWcdmaUnattached );
-            }
-        else if ( ntwStatus == ENtwkStatusNotKnown )
+        switch ( ntwStatus )
             {
-            LOG( Log::Printf( _L("DCL: Async request for WCDMA ntwk status failed %d!"),
-                 status.Int() ));
+            case ENtwkStatusNotKnown:
+                LOG( Log::Printf( _L("DCL: Async request for WCDMA ntwk status failed %d!"),
+                     status.Int() ));
+                break;
+                
+            case EConnMonStatusNotAvailable:
+            case EConnMonStatusUnattached:
+                LOG( Log::Printf( _L("DCL: WCDMA ntwk is UnAttached." )));
+                iNetworkIsUnAttached = ETrue;
+                NotifyPubSub( KPSUidWcdmaStatus, EPSWcdmaUnattached);
+                break;
+                
+            case EConnMonStatusActive:
+                LOG( Log::Printf( _L("DCL: WCDMA ntwk is Active." )));
+                iNetworkIsUnAttached = EFalse;
+                NotifyPubSub( KPSUidWcdmaStatus, EPSWcdmaContextActive );
+                break;
+                
+            case EConnMonStatusAttached:
+            default:
+                LOG( Log::Printf( _L("DCL: WCDMA ntwk is Attached." )));
+                iNetworkIsUnAttached = EFalse;
+                NotifyPubSub( KPSUidWcdmaStatus, EPSWcdmaAttach );
             }
-        else
-            {
-            LOG( Log::Printf( _L("DCL: WCDMA ntwk is Attached." )));
-            iNetworkIsUnAttached = EFalse;
-            NotifyPubSub( KPSUidWcdmaStatus, EPSWcdmaAttach );
-            }
+        
         }
     else
         {
--- a/dbcreator/commsdatcreator/Inc/cdcprocessorglobal.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/dbcreator/commsdatcreator/Inc/cdcprocessorglobal.h	Mon Jan 18 20:33:49 2010 +0200
@@ -142,18 +142,18 @@
         void SetGenConnSettingWlanUsage( HBufC16* aPtrTag );
 
         /**
-        * Sets the "Seamlessness (cellular data usage) in home networks"
+        * Sets the "cellular data usage in home networks"
         * parameter in general connection settings.
         * @param aPtrTag string containing the parameter's value.
         */
-        void SetGenConnSettingSeamlessnessHome( HBufC16* aPtrTag );
+        void SetGenConnSettingCellularDataUsageHome( HBufC16* aPtrTag );
 
         /**
-        * Sets the "Seamlessness (cellular data usage) in visitor networks"
+        * Sets the "cellular data usage in visitor networks"
         * parameter in general connection settings.
         * @param aPtrTag string containing the parameter's value.
         */
-        void SetGenConnSettingSeamlessnessVisitor( HBufC16* aPtrTag );
+        void SetGenConnSettingCellularDataUsageVisitor( HBufC16* aPtrTag );
 
         // Stores the general connection settings, using CMM
         void SetGenConnSettingsL();
--- a/dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -156,8 +156,8 @@
     // Create General connection settings struct and set the default values
     iGenConnSettings = new (ELeave) TCmGenConnSettings;
     iGenConnSettings->iUsageOfWlan = ECmUsageOfWlanKnown;
-    iGenConnSettings->iSeamlessnessHome = ECmSeamlessnessConfirmFirst;
-    iGenConnSettings->iSeamlessnessVisitor = ECmSeamlessnessConfirmFirst;
+    iGenConnSettings->iCellularDataUsageHome = ECmCellularDataUsageAutomatic;
+    iGenConnSettings->iCellularDataUsageVisitor = ECmCellularDataUsageConfirm;
 
     CLOG_WRITE( "Initialising FeatureManager\n" )   
     //checks if Wlan feature is supported
@@ -462,15 +462,15 @@
                 break;
                 }
                 
-            case ESeamlessnessHome:
+            case ECellularDataUsageHome:
                 {
-                SetGenConnSettingSeamlessnessHome( ptrTag );
+                SetGenConnSettingCellularDataUsageHome( ptrTag );
                 break;
                 }
                 
-            case ESeamlessnessVisitor:
+            case ECellularDataUsageVisitor:
                 {
-                SetGenConnSettingSeamlessnessVisitor( ptrTag );
+                SetGenConnSettingCellularDataUsageVisitor( ptrTag );
                 break;
                 }
                 
@@ -707,37 +707,37 @@
     }
 
 // ---------------------------------------------------------
-// CProcessorGlobal::SetGenConnSettingSeamlessnessHome
+// CProcessorGlobal::SetGenConnSettingCellularDataUsageHome
 // ---------------------------------------------------------
 //
-void CProcessorGlobal::SetGenConnSettingSeamlessnessHome( HBufC16* aPtrTag )
+void CProcessorGlobal::SetGenConnSettingCellularDataUsageHome( HBufC16* aPtrTag )
     {
     if ( aPtrTag->CompareF( KStrAutomatic ) == 0 ) 
         {
-        iGenConnSettings->iSeamlessnessHome = ECmSeamlessnessShowprogress;
+        iGenConnSettings->iCellularDataUsageHome = ECmCellularDataUsageAutomatic;
         }
     else if ( iIsWlanS && aPtrTag->CompareF( KStrWlanOnly ) == 0 ) 
         {
         // This value can't be set if WLAN isn't supported
-        iGenConnSettings->iSeamlessnessHome = ECmSeamlessnessDisabled;
+        iGenConnSettings->iCellularDataUsageHome = ECmCellularDataUsageDisabled;
         }
     // else: Default value for the string is: "Confirm", set in ConstructL()
     }
 
 // ---------------------------------------------------------
-// CProcessorGlobal::SetGenConnSettingSeamlessnessVisitor
+// CProcessorGlobal::SetGenConnSettingCellularDataUsageVisitor
 // ---------------------------------------------------------
 //
-void CProcessorGlobal::SetGenConnSettingSeamlessnessVisitor( HBufC16* aPtrTag )
+void CProcessorGlobal::SetGenConnSettingCellularDataUsageVisitor( HBufC16* aPtrTag )
     {
     if ( aPtrTag->CompareF( KStrAutomatic ) == 0 ) 
         {
-        iGenConnSettings->iSeamlessnessVisitor = ECmSeamlessnessShowprogress;
+        iGenConnSettings->iCellularDataUsageVisitor = ECmCellularDataUsageAutomatic;
         }
     else if ( iIsWlanS && aPtrTag->CompareF( KStrWlanOnly ) == 0 ) 
         {
         // This value can't be set if WLAN isn't supported
-        iGenConnSettings->iSeamlessnessVisitor = ECmSeamlessnessDisabled;
+        iGenConnSettings->iCellularDataUsageVisitor = ECmCellularDataUsageDisabled;
         }
     // else: Default value for the string is: "Confirm", set in ConstructL()
     }
--- a/dbcreator/commsdatcreator/Src/cdcreaderxml.cpp	Thu Jan 07 12:56:54 2010 +0200
+++ b/dbcreator/commsdatcreator/Src/cdcreaderxml.cpp	Mon Jan 18 20:33:49 2010 +0200
@@ -476,8 +476,8 @@
 _LIT16( KDefaultConnectionType,     "DefaultConnectionType" );
 _LIT16( KDefaultConnectionName,     "DefaultConnectionName" );
 _LIT16( KUsageOfWlan,               "UsageOfWlan" );
-_LIT16( KSeamlessnessHome,          "SeamlessnessHome" );
-_LIT16( KSeamlessnessVisitor,       "SeamlessnessVisitor" );
+_LIT16( KCellularDataUsageHome,     "CellularDataUsageHome" );
+_LIT16( KCellularDataUsageVisitor,  "CellularDataUsageVisitor" );
 _LIT16( KGprsLastSocketActivityTimeout, "GprsLastSocketActivityTimeout" );
 _LIT16( KGprsLastSessionClosedTimeout,  "GprsLastSessionClosedTimeout" );
 _LIT16( KGprsLastSocketClosedTimeout,   "GprsLastSocketClosedTimeout" );
@@ -1780,8 +1780,8 @@
     iGlobalParams.Append( EInputParams( EDefaultConnectionType, KDefaultConnectionType ) );
     iGlobalParams.Append( EInputParams( EDefaultConnectionName, KDefaultConnectionName ) );
     iGlobalParams.Append( EInputParams( EUsageOfWlan,           KUsageOfWlan ) );
-    iGlobalParams.Append( EInputParams( ESeamlessnessHome,      KSeamlessnessHome ) );
-    iGlobalParams.Append( EInputParams( ESeamlessnessVisitor,   KSeamlessnessVisitor ) );
+    iGlobalParams.Append( EInputParams( ECellularDataUsageHome,         KCellularDataUsageHome ) );
+    iGlobalParams.Append( EInputParams( ECellularDataUsageVisitor,      KCellularDataUsageVisitor ) );
     iGlobalParams.Append( EInputParams( EGprsLastSocketActivityTimeout, KGprsLastSocketActivityTimeout ) );
     iGlobalParams.Append( EInputParams( EGprsLastSessionClosedTimeout,  KGprsLastSessionClosedTimeout ) );
     iGlobalParams.Append( EInputParams( EGprsLastSocketClosedTimeout,   KGprsLastSocketClosedTimeout ) );
Binary file dbcreator/conf/commsdatcreator.confml has changed
--- a/dbcreator/inc/cdccommon.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/dbcreator/inc/cdccommon.h	Mon Jan 18 20:33:49 2010 +0200
@@ -87,19 +87,19 @@
     EWlanLastSocketActivityTimeout	= 0x0000001f,
     EWlanLastSessionClosedTimeout	= 0x00000020,
     EWlanLastSocketClosedTimeout	= 0x00000021,
-    EWlanBGScanInterval		= 0x00000022,
-    EWlanUseDefSettings		= 0x00000023,
-    EWlanLongRetry			= 0x00000024,
-    EWlanShortRetry			= 0x00000025,
-    EWlanRTS				= 0x00000026,
-    EWlanTxPowerLevel		= 0x00000027,
-    EWlanRadioMeasurements	= 0x00000028,
-    EWlanPowerMode			= 0x00000029,    
-    EDefaultAP				= 0x0000002a,
-    EUsageOfWlan            = 0x0000002b,
-    ESeamlessnessHome       = 0x0000002c,
-    ESeamlessnessVisitor    = 0x0000002d,
-    EUnused               	= 0x00010000
+    EWlanBGScanInterval		  = 0x00000022,
+    EWlanUseDefSettings		  = 0x00000023,
+    EWlanLongRetry			  = 0x00000024,
+    EWlanShortRetry			  = 0x00000025,
+    EWlanRTS				  = 0x00000026,
+    EWlanTxPowerLevel		  = 0x00000027,
+    EWlanRadioMeasurements	  = 0x00000028,
+    EWlanPowerMode			  = 0x00000029,    
+    EDefaultAP				  = 0x0000002a,
+    EUsageOfWlan              = 0x0000002b,
+    ECellularDataUsageHome    = 0x0000002c,
+    ECellularDataUsageVisitor = 0x0000002d,
+    EUnused               	  = 0x00010000
     };
     
     
--- a/ipcm_plat/commsdat_wlan_api/inc/cmmanagertablefields.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/ipcm_plat/commsdat_wlan_api/inc/cmmanagertablefields.h	Mon Jan 18 20:33:49 2010 +0200
@@ -96,8 +96,8 @@
 const CommsDat::TMDBElementId KCDTIdDefConnType         = 0x00120000;
 const CommsDat::TMDBElementId KCDTIdDefConnUid          = 0x00130000;
 const CommsDat::TMDBElementId KCDTIdUsageOfWlan         = 0x00150000;
-const CommsDat::TMDBElementId KCDTIdSeamlessnessHome    = 0x00170000;
-const CommsDat::TMDBElementId KCDTIdSeamlessnessVisitor = 0x00180000;
+const CommsDat::TMDBElementId KCDTIdCellularDataUsageHome    = 0x00170000;
+const CommsDat::TMDBElementId KCDTIdCellularDataUsageVisitor = 0x00180000;
 
 #endif      // TABLE_FIELDS_H
 
--- a/ipcm_plat/extended_connection_settings_api/group/bld.inf	Thu Jan 07 12:56:54 2010 +0200
+++ b/ipcm_plat/extended_connection_settings_api/group/bld.inf	Mon Jan 18 20:33:49 2010 +0200
@@ -30,3 +30,4 @@
 ../inc/cmsettingsui.h     MW_LAYER_PLATFORM_EXPORT_PATH(cmsettingsui.h)
 ../inc/cmcommonui.h     MW_LAYER_PLATFORM_EXPORT_PATH(cmcommonui.h)
 ../inc/cmmanagerext.h     MW_LAYER_PLATFORM_EXPORT_PATH(cmmanagerext.h)
+../inc/cmmanagerkeys.h    MW_LAYER_PLATFORM_EXPORT_PATH(cmmanagerkeys.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipcm_plat/extended_connection_settings_api/inc/cmmanagerkeys.h	Mon Jan 18 20:33:49 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009 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:  CmManager central repository keys.
+*
+*/
+
+#ifndef CMMANAGERKEYS_H
+#define CMMANAGERKEYS_H
+
+/**
+ * UID of CmManager repository
+ *
+ * @since S60 5.1
+ */
+const TUid KCRUidCmManager = {0x10207376}; 
+
+/**
+ * Cellular data usage setting in current network.
+ *
+ * This means that the client does not need to take into account 
+ * whether the device is in the home country or in a foreign country 
+ * but the value is provided for the country the device is at the moment.
+ * See TCmCellularDataUsage in cmgenconnsettings.h for more info.
+ *
+ * @since S60 5.1
+ */
+const TUint32 KCurrentCellularDataUsage  = 0x00000001;
+    
+#endif // CMMANAGERKEYS_H
--- a/ipcm_pub/connection_settings_api/inc/cmgenconnsettings.h	Thu Jan 07 12:56:54 2010 +0200
+++ b/ipcm_pub/connection_settings_api/inc/cmgenconnsettings.h	Mon Jan 18 20:33:49 2010 +0200
@@ -18,29 +18,61 @@
 #define CMGENCONNSETTINGS_H
 
 
-// Usage types for new WLAN
+// Usage types for WLAN
 enum TCmUsageOfWlan
     {
+    // Known WLANs will be used, and they will be switched to
+    // if they become available during existing connections.
     ECmUsageOfWlanKnown,
-    ECmUsageOfWlanKnownAndNew, // default 
+    // Known and new WLANs will be used. 
+    ECmUsageOfWlanKnownAndNew, 
+    // WLANs will be used but they will not be switched to
+    // from existing connections.
     ECmUsageOfWlanManual   
     };
 
-// Seamlessness values
+// Cellular data usage values
+enum TCmCellularDataUsage
+    {
+    // Cellular data connection is not used automatically but a confirmation
+    // is requested from the user.
+    ECmCellularDataUsageConfirm,
+    // Cellular data connection is automatically used without querying
+    // permission from the user.
+    ECmCellularDataUsageAutomatic,
+    // Cellular data usage is disabled. Only WLAN will be used.
+    ECmCellularDataUsageDisabled
+    };
+
+// DEPRECATED enumeration which will be removed within few weeks.
+// DO NOT USE THESE VALUES.
+// Functionality related to these values is broken although it compiles.
 enum TCmSeamlessnessValue
         {
-        ECmSeamlessnessNotRoamedTo,   // IAP can be used in start, but not roamed to unless already active
-        ECmSeamlessnessConfirmFirst,  // Confirm first
-        ECmSeamlessnessShowprogress,  // Show progress
-        ECmSeamlessnessFullySeamless, // Same as previous
-        ECmSeamlessnessDisabled       // IAP blacklisted and not used at all
+        ECmSeamlessnessNotRoamedTo,   // DO NOT USE
+        ECmSeamlessnessConfirmFirst,  // DO NOT USE
+        ECmSeamlessnessShowprogress,  // DO NOT USE
+        ECmSeamlessnessFullySeamless, // DO NOT USE
+        ECmSeamlessnessDisabled       // DO NOT USE
         };
 
 // Table for connection settings other than default connection
 struct TCmGenConnSettings
     {
+    // WLAN usage.
     TCmUsageOfWlan         iUsageOfWlan;
+    // Cellular data usage in home country.
+    TCmCellularDataUsage   iCellularDataUsageHome;
+    // Cellular data usage abroad.
+    TCmCellularDataUsage   iCellularDataUsageVisitor;
+
+    // DEPRECATED variable that will be removed within few weeks.
+    // DO NOT USE THESE VARIABLES.
+    // Functionality related to this variable is broken although it compiles.
     TCmSeamlessnessValue   iSeamlessnessHome;
+    // DEPRECATED variable that will be removed within few weeks.
+    // DO NOT USE THESE VARIABLES.
+    // Functionality related to this variable is broken although it compiles.
     TCmSeamlessnessValue   iSeamlessnessVisitor;
     };