bearermanagement/mpm/src/mpmserversession.cpp
changeset 18 fcbbe021d614
parent 3 f7816ffc66ed
child 20 9c97ad6591ae
--- a/bearermanagement/mpm/src/mpmserversession.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmserversession.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -138,6 +138,9 @@
 User connection deactivated" )
         }   
 
+    // Clean up the blacklist table 
+    iMyServer.HandleServerUnblackListIap( iConnId, 0 );
+
     // Make sure the connection is removed from server's information array.
     iMyServer.RemoveBMConnection( iConnId, *this );
     }
@@ -445,6 +448,9 @@
     // 
     iAppUid = aMessage.Int2();
 
+    MPMLOGSTRING2( "CMPMServerSession::HandleServerChooseIapL: \
+Client UID = 0x%x", iAppUid )
+
     if ( !iIapSelection )
         {
         iIapSelection = CMPMIapSelection::NewL( iMyServer.CommsDatAccess(),
@@ -703,11 +709,6 @@
 
     iMyServer.AppendBMIAPConnectionL( startedIap, startedId, *this );
 
-    // Unblacklist all IAPs related to the connection error 
-    // when connection has started.
-    // 
-    iMyServer.HandleServerUnblackListIap( startedId, ETemporary );
-
     // Complete the message as soon as possible to avoid latency in BM
     // 
     aMessage.Complete( KErrNone );
@@ -933,22 +934,13 @@
                 {
                 if ( MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
                     {
-                    //Check if cellular data usage query has already been presented to the user in this country
-                    if ( MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true )
-                        {
-                        //International roaming
-                        iConfirmDlgRoaming = CMPMConfirmDlgRoaming::NewL( 
-                                *this, 
-                                snapId, 
-                                iMigrateIap, 
-                                CMPMConfirmDlg::EConfirmDlgVisitorNetwork, 
-                                reconnect );
-                        }
-                    else
-                        {
-                        //Handle like user would have answered "Connect this time" to dialog
-                        RoamingConfirmationCompletedL( KErrNone, EMsgQueryThisTime, reconnect );
-                        }
+                    //International roaming
+                    iConfirmDlgRoaming = CMPMConfirmDlgRoaming::NewL( 
+                            *this, 
+                            snapId, 
+                            iMigrateIap, 
+                            CMPMConfirmDlg::EConfirmDlgVisitorNetwork, 
+                            reconnect );
                     }
                 else
                     {
@@ -1105,13 +1097,6 @@
                     TRAP_IGNORE(MyServer().CommsDatAccess()->WriteGenConnSettingsL( genConnSettings )); 
                     }
                 } 
-            else
-                {
-                //In foreign country connect automatically is not stored in commsdat
-                //even user selected so. We just do not ask confirmation for the cellular
-                //connection again in this country:
-                MyServer().RoamingWatcher()->SetAskCellularDataUsageAbroad( false );            
-                }
             }
         
         //user selected connect this time
@@ -2671,8 +2656,8 @@
         // Required notifications must go through whenever MPM decides
         // to initiate them.
         //
-        if( ( iStoredIapInfo.HoldPrefIapNotif() && aCaller == EConnMon )  ||
-                ( state == ERoaming && aCaller == EConnMon ) )
+        if( ( aCaller == EConnMon || aCaller == EConnMonEvent ) && 
+                ( iStoredIapInfo.HoldPrefIapNotif() || state == ERoaming) )
             {
             MPMLOGSTRING( "CMPMServerSession::PrefIAPNotificationL - \
 Mobility ongoing, notification will be handled later" )
@@ -2714,7 +2699,8 @@
         tempMpmConnPref.SetSnapId( snap );
         IapSelectionL()->ChooseBestIAPL( tempMpmConnPref, availableIAPList );
         validateIapId = tempMpmConnPref.IapId();
-        if ( ( validateIapId == 0 ) && ( aCaller == EConnMon ) )
+        if ( ( validateIapId == 0 ) 
+                && ( aCaller == EConnMon || aCaller == EConnMonEvent ) )
             {
             // Since Connection Monitor is the only component which 
             // is unaware of Connection Id and SNAP, it can't send 
@@ -2724,8 +2710,19 @@
             // All the other components take responsibility of 
             // sending the error notification. 
             // 
-            TRAP_IGNORE( ErrorNotificationL( KErrNotFound,
-                                             EMPMMobilityErrorNotification ) )
+            // Do not send the error if this call came from ConnMon Event.
+            // This will prevent unnecessary mobility errors.
+            // For example if there is two WLAN networks in Internet destination
+            // and we get weak indication for the one to which we are connected.
+            // Then connmon signals us with IAPAvailabilityChange which results
+            // to no available IAPs. We should not report error in that case.
+            if ( aCaller == EConnMon )
+                {
+                TRAP_IGNORE( ErrorNotificationL( KErrNotFound,
+                                             EMPMMobilityErrorNotification ) );
+                }
+            CleanupStack::PopAndDestroy( &availableIAPList );
+            return;                                                                   
             }
 
         TUint32 retNetId = 0;