hotspotfw/hsserver/src/hssiapsettingshandler.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 24 63be7eb3fc78
--- a/hotspotfw/hsserver/src/hssiapsettingshandler.cpp	Tue Aug 31 16:18:40 2010 +0300
+++ b/hotspotfw/hsserver/src/hssiapsettingshandler.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -23,10 +23,10 @@
 #include "am_debug.h"
 #include <es_enum.h>
 
-#include <cmconnectionmethod.h>
+#include <cmconnectionmethodext.h>
 #include <cmconnectionmethoddef.h>
-#include <cmdestination.h>
-#include <cmmanager.h>
+#include <cmdestinationext.h>
+#include <cmmanagerext.h>
 
 using namespace CMManager;
 
@@ -82,7 +82,7 @@
     {
     DEBUG("CHssIapSettingsHandler::CreateClientIapL");
 
-    RCmManager cmManager;
+    RCmManagerExt cmManager;
     cmManager.OpenL();
     CleanupClosePushL( cmManager );
     
@@ -91,7 +91,7 @@
     CleanupClosePushL( destinations );
     
     cmManager.AllDestinationsL( destinations );
-    RCmDestination destination;
+    RCmDestinationExt destination;
     // Loop through each destination
     for( TInt i = 0; i < destinations.Count(); i++ )
         {
@@ -99,9 +99,10 @@
         CleanupClosePushL(destination); 
         // Internet destination will always exist in the system.
         // Internet destination will have ESnapPurposeInternet set in its metadata.
-        if (destination.MetadataL(CMManager::ESnapMetadataPurpose) == CMManager::ESnapPurposeInternet)
+        if ( destination.MetadataL( CMManager::ESnapMetadataPurpose ) ==
+             CMManager::ESnapPurposeInternet )
             {
-            RCmConnectionMethod plugin = cmManager.CreateConnectionMethodL( KUidWlanBearerType );
+            RCmConnectionMethodExt plugin = cmManager.CreateConnectionMethodL( KUidWlanBearerType );
             CleanupClosePushL( plugin );
                 
             plugin.SetStringAttributeL( ECmName, aIapName );
@@ -125,6 +126,111 @@
     }
 
 // -----------------------------------------------------------------------------
+// CreateIapL
+// -----------------------------------------------------------------------------
+//    
+TInt CHssIapSettingsHandler::CreateIapL( TBool aHotspot )
+    {
+    DEBUG("CHssIapSettingsHandler::CreateIapL");
+    TInt ret ( KErrNone );
+    RCmManagerExt cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL( cmManager );
+    
+    // Read all destination(SNAP) settings into an array
+    RArray<TUint32> destinations;
+    CleanupClosePushL( destinations );
+    
+    cmManager.AllDestinationsL( destinations );
+    RCmDestinationExt destination;
+    // Loop through each destination
+    for( TInt i = 0; i < destinations.Count(); i++ )
+        {
+        destination = cmManager.DestinationL( destinations[i] );
+        CleanupClosePushL( destination ); 
+        // Internet destination will always exist in the system.
+        // Internet destination will have ESnapPurposeInternet 
+        // set in its metadata.
+        if ( destination.MetadataL( CMManager::ESnapMetadataPurpose ) == 
+                                        CMManager::ESnapPurposeInternet )
+            {
+            CWlanMgmtClient* wlanMgmtClient = CWlanMgmtClient::NewL();
+            CleanupStack::PushL( wlanMgmtClient );
+            
+            TWlanConnectionMode connMode;
+            User::LeaveIfError( 
+                    wlanMgmtClient->GetConnectionMode( connMode ) );
+            
+            TWlanConnectionSecurityMode secMode;
+            User::LeaveIfError( 
+                    wlanMgmtClient->GetConnectionSecurityMode( secMode ) );
+                          
+            HBufC* ssid( NULL );
+            TWlanSsid ssidConn;
+            
+            User::LeaveIfError( 
+                    wlanMgmtClient->GetConnectionSsid( ssidConn ) );
+            ssid = HBufC::NewLC( ssidConn.Length() );
+            ssid->Des().Copy( ssidConn ); 
+            
+            TUint32 serviceId(0);
+            TUint32 easyWlanIapId(0);
+            easyWlanIapId = cmManager.EasyWlanIdL();
+                       
+            RCmConnectionMethodExt easyWlanPlugin;
+            easyWlanPlugin = cmManager.ConnectionMethodL( easyWlanIapId );
+            CleanupClosePushL( easyWlanPlugin );
+            TBool scanSsid = easyWlanPlugin.GetBoolAttributeL( EWlanScanSSID );
+            TUint32 easyWlanServiceId = 
+                    easyWlanPlugin.GetIntAttributeL( EWlanServiceId );
+            CleanupStack::PopAndDestroy(); // easyWlanPlugin;
+            
+            RCmConnectionMethodExt plugin =
+                cmManager.CreateConnectionMethodL( KUidWlanBearerType );
+            CleanupClosePushL( plugin );        
+            plugin.SetStringAttributeL( ECmName, *ssid );
+            plugin.SetStringAttributeL( EWlanSSID, *ssid );
+            plugin.SetIntAttributeL( CMManager::EWlanSecurityMode,
+                    ConvertConnectionSecurityModeToSecModeL( secMode ));
+            plugin.SetIntAttributeL( EWlanConnectionMode, 
+                    ConvertConnectionModeToNetModeL( connMode ) );
+            plugin.SetBoolAttributeL( EWlanScanSSID, scanSsid );
+            
+            if ( aHotspot )
+                {
+				// A hotspot IAP. Mark it so it can be deleted after the use.
+                plugin.SetStringAttributeL( ECmConfigDaemonManagerName, 
+                                            KHotSpotPlugin );
+                }
+            
+            destination.AddConnectionMethodL( plugin );
+            destination.UpdateL();
+            serviceId = plugin.GetIntAttributeL( EWlanServiceId );                
+            ret = plugin.GetIntAttributeL( ECmIapId );  
+            CleanupStack::PopAndDestroy( &plugin ); 
+            if ( secMode == EWlanConnectionSecurityWep )
+                {
+                SaveWEPKeyL( easyWlanServiceId, serviceId );
+                }
+                    
+            if ( secMode == EWlanConnectionSecurityWpaPsk )
+                {
+                SaveWPAKeyL( easyWlanServiceId, serviceId );
+                }
+            
+            CleanupStack::PopAndDestroy( ssid ); 
+            CleanupStack::PopAndDestroy( wlanMgmtClient );
+            }
+        CleanupStack::PopAndDestroy( &destination ); 
+        }
+    CleanupStack::PopAndDestroy( &destinations ); 
+    CleanupStack::PopAndDestroy( &cmManager );
+
+    DEBUG1("CHssIapSettingsHandler::CreateIapL Done iapId: %d", ret);
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
 // DeleteIapL
 // -----------------------------------------------------------------------------
 //
@@ -132,11 +238,11 @@
     {
     DEBUG1("CHssIapSettingsHandler:::DeleteIapL aIapId=%d ", aIapId);
 
-    RCmManager cmManager;
+    RCmManagerExt cmManager;
     cmManager.OpenL();
     CleanupClosePushL( cmManager );
 
-    RCmConnectionMethod plugin = cmManager.ConnectionMethodL( aIapId );
+    RCmConnectionMethodExt plugin = cmManager.ConnectionMethodL( aIapId );
     CleanupClosePushL( plugin );
 
     cmManager.RemoveAllReferencesL( plugin );
@@ -148,6 +254,50 @@
     }
 
 // ---------------------------------------------------------
+// MoveIapL()
+// ---------------------------------------------------------
+//
+void  CHssIapSettingsHandler::MoveIapL( const TUint aIapId )
+    {
+    DEBUG1("CHssIapSettingsHandler::MoveIapL aIapId=%d ", aIapId);
+    // Now move to Internet SNAP
+    RCmManagerExt cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL( cmManager );
+    
+    // Read all destination(SNAP) settings into an array
+    RArray<TUint32> destinations;
+    CleanupClosePushL( destinations );
+    
+    cmManager.AllDestinationsL( destinations );
+    RCmDestinationExt destination;
+    // Loop through each destination
+    for( TInt i = 0; i < destinations.Count(); i++ )
+        {
+        destination = cmManager.DestinationL( destinations[i] );
+        CleanupClosePushL( destination ); 
+        // Internet destination will always exist in the system.
+        // Internet destination will have ESnapPurposeInternet 
+        // set in its metadata.
+        if ( destination.MetadataL( CMManager::ESnapMetadataPurpose ) == 
+                                    CMManager::ESnapPurposeInternet )
+            {
+            RCmConnectionMethodExt iap = cmManager.ConnectionMethodL( aIapId );
+            CleanupClosePushL( iap );
+            iap.SetStringAttributeL( ECmConfigDaemonManagerName, KHotSpotPlugin );
+            destination.AddConnectionMethodL( iap );
+            CleanupStack::PopAndDestroy( &iap );
+            destination.UpdateL();
+            }
+        CleanupStack::PopAndDestroy( &destination ); 
+        }
+    CleanupStack::PopAndDestroy( &destinations ); 
+    CleanupStack::PopAndDestroy( &cmManager );
+   
+    DEBUG( "CHssIapSettingsHandler::MoveIapL Done" );
+    }
+
+// ---------------------------------------------------------
 // SaveWEPKeyL()
 // ---------------------------------------------------------
 //