diff -r 63be7eb3fc78 -r f28ada11abbf hotspotfw/hsserver/src/hssiapsettingshandler.cpp --- 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 -#include +#include #include -#include -#include +#include +#include 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 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 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() // --------------------------------------------------------- //