wlanutilities/wlansniffer/model/src/wsfmodel.cpp
branchRCL_3
changeset 25 f28ada11abbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/model/src/wsfmodel.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,787 @@
+/*
+* Copyright (c) 2007-2008 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:  Implementation of CWsfModel
+*
+*/
+
+
+//  EXTERNAL INCLUDES
+#include <eikenv.h>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <ictsclientinterface.h>
+#include <cmmanagerext.h>
+#include <cmdestinationext.h>
+#include <cmpluginwlandef.h>
+#include <centralrepository.h>
+#include <internetconnectivitycrkeys.h>
+#include <featmgr.h>
+#include <sysutil.h>
+#include <wlanerrorcodes.h>
+
+//  CLASS HEADER
+#include "wsfmodel.h"
+
+//  INTERNAL INCLUDES
+#include "wsfwlaninfoarray.h"
+#include "wsfwlaniapwizard.h"
+#include "wsfapplauncher.h"
+#include "wsfmodelobserver.h"
+#include "wsfstatechangeobserver.h"
+#include "wsfscreensaverwatcher.h"
+#include "wsflogger.h"
+
+using namespace CMManager;
+
+
+/**
+* UID of helper application 
+* used when model is instantiated in the active idle
+*/
+static const TUid KHelperApUid = { 0x10281CEB };
+
+/**
+* Estimated overhead for access point creation 
+*/
+const TInt KEstimatedOverhead = 8192;
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfModel* CWsfModel::NewL( MWsfStateChangeObserver& aObserver,
+                                     const TBool aScreenSaverAware )
+    {
+    CWsfModel* self = CWsfModel::NewLC( aObserver, aScreenSaverAware );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::NewLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfModel* CWsfModel::NewLC( MWsfStateChangeObserver& aObserver,
+                                      const TBool aScreenSaverAware )
+    {
+    CWsfModel* self = new( ELeave ) CWsfModel;
+    CleanupStack::PushL( self );
+    self->ConstructL( aObserver, aScreenSaverAware );
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::~CWsfModel
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfModel::~CWsfModel()
+    {
+    LOG_ENTERFN( "CWsfModel::~CWsfModel" );
+    iSession.CancelNotifyEvent();
+    iSession.Close();
+    delete iScreenSaverWatcher;
+    delete iArray;   
+    delete iObservedWlan;
+    delete iBrowserLauncher;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CWsfModel
+// ----------------------------------------------------------------------------
+//
+CWsfModel::CWsfModel(): 
+    iEikEnv( CEikonEnv::Static() ),
+    iRefreshing( EFalse )
+    {
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::ConstructL( MWsfStateChangeObserver& aObserver, 
+                            const TBool aScreenSaverAware )
+    {
+    iArray = CWsfWlanInfoArray::NewL(); 
+    iBrowserLauncher = CWsfAppLauncher::NewL();
+    User::LeaveIfError( iSession.Connect() ); 
+    iSession.NotifyEventL( aObserver );
+    if ( aScreenSaverAware )
+        {
+        iScreenSaverWatcher = CWsfScreenSaverWatcher::NewL( *this );
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::SetEngineObserver
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::SetEngineObserver( MWsfModelObserver* aObserver )
+    {
+    LOG_ENTERFN( "CWsfModel::SetEngineObserver" );
+    iObserver = aObserver;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::GetWlanListL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfWlanInfoArray* CWsfModel::GetWlanListL()
+    {
+    LOG_ENTERFN( "CWsfModel::GetWlanListL" );
+    iArray->Reset();
+    iSession.UpdateWlanListL( iArray );
+    return iArray;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::GetWlanListSize
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::GetWlanListSize( TPckgBuf<TUint>& aPckg, 
+                                           TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN( "CWsfModel::GetWlanListSize" );
+    iSession.GetWlanListSize( aPckg, aStatus );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::GetWlanList
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::GetWlanList( TPckgBuf<TUint>& aPckg, TPtr8& aPtr, 
+                                       TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN( "CWsfModel::GetWlanList" );
+    iSession.GetWlanList( aPckg, aPtr, aStatus );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::SetActiveViewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::SetActiveViewL( TInt aViewId )
+    {
+    TUid id;
+    id.iUid = aViewId;
+    iActiveView = id;
+    }
+        
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ActiveViewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUid CWsfModel::ActiveViewL()
+    {
+    return iActiveView;
+    }
+
+    
+// ----------------------------------------------------------------------------
+// CWsfModel::SetObservedWlanL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::SetObservedWlanL( const TDesC8& aSsid )
+    {
+    HBufC8* ssid = aSsid.AllocL();
+    delete iObservedWlan;
+    iObservedWlan = ssid;
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ObservedWlan
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CWsfModel::ObservedWlan()
+    {
+    return *iObservedWlan;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ConnectL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C int CWsfModel::ConnectL( TUint32 aIapId, TBool aConnectOnly,
+                                  TWsfIapPersistence aPersistence )
+    {
+    LOG_ENTERFN( "CWsfModel::ConnectL" );
+    
+    if ( iObserver )
+        {
+        iObserver->ConnectingL( aIapId );
+        }
+    
+    TInt err = iSession.ConnectWlanBearerL( aIapId, aConnectOnly, aPersistence );
+    if ( err == KErrNone )
+        {
+        iConnectedIapId = aIapId;
+        }
+    else
+        {
+        if ( iObserver )
+            {
+            iObserver->BrowserLaunchFailed( err );            
+            }
+        }
+
+    if ( iObserver )
+        {
+        iObserver->ConnectingFinishedL( err );
+        }
+    
+    iRefreshing = iSession.RequestScanL();
+    
+    return err;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ConnectL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::ConnectL( TPckgBuf<TBool>& aPckg, TUint32 aIapId,
+                                   TBool aConnectOnly,
+                                   TWsfIapPersistence aPersistence,
+                                   TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN( "CWsfModel::ConnectL" );
+    
+    if ( iObserver )
+        {
+        iObserver->ConnectingL( aIapId );
+        }
+    
+    iSession.ConnectWlanBearer( aPckg, aIapId, aConnectOnly, aPersistence, aStatus );
+    }
+
+// ----------------------------------------------------------------------------
+// CWsfModel::SetConnectResultL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::SetConnectResultL( TInt aResult, TUint /*aIapId*/ )
+    {
+    LOG_ENTERFN( "CWsfModel::SetConnectResultL" );
+    
+    iSession.SetConnectWlanBearerResult( aResult );
+    
+    if ( iObserver && aResult != KErrNone )
+        {
+        iObserver->ConnectingFinishedL( aResult );
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::DisconnectL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::DisconnectL()
+    {
+    LOG_ENTERFN( "CWsfModel::DisconnectL" );
+    TBool disconnected = iSession.DisconnectWlanBearerL();
+    LOG_WRITEF( "disconnected = %d", disconnected );
+    iConnectedIapId = 0;
+    if ( !disconnected )
+        {
+        iRefreshing = iSession.RequestScanL(); 
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::Disconnect
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::Disconnect( TPckgBuf<TBool>& aPckg, TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN( "CWsfModel::Disconnect" );
+    iSession.DisconnectWlanBearer( aPckg, aStatus );
+    iConnectedIapId = 0;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::Refreshing
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::Refreshing()
+    {
+    return iRefreshing;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::SetRefreshState
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::SetRefreshState( TBool aRefreshing )
+    {
+    iRefreshing = aRefreshing;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::EnableScanL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::EnableScanL()
+    {
+    LOG_ENTERFN( "CWsfModel::EnableScanL" );
+    TBool enableScan( iSession.EnableScanL() );
+    if ( iScreenSaverWatcher )
+        {
+        iScreenSaverWatcher->Cancel();
+        iScreenSaverWatcher->StartStatusScanning();
+        }
+    return enableScan;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::DisableScanL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::DisableScanL()
+    {
+    LOG_ENTERFN( "CWsfModel::DisableScanL" );
+    TBool disableScan( iSession.DisableScanL() );   
+    if ( iScreenSaverWatcher )
+        {
+        iScreenSaverWatcher->Cancel();
+        }
+    return disableScan; 
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::IsScanEnabledL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::IsScanEnabledL()
+    {
+    return iSession.IsScanEnabledL(); 
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::LaunchBrowserL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::LaunchBrowserL( TUint32 aIapId )
+    {
+    LOG_ENTERFN( "CWsfModel::LaunchBrowserL" );
+    
+    if ( !iBrowserLauncher->Launching() ||
+         iBrowserLauncher->BrowserIap() != aIapId ) 
+        {
+        LOG_WRITE( "launching browser..." );
+        iConnectedIapId = aIapId;        
+        iBrowserLauncher->LaunchBrowserL( *this, aIapId );
+        }
+    else if ( iBrowserLauncher->BrowserIap() == aIapId ) 
+        {
+        LOG_WRITE( "bringing browser to foreground..." );
+        ContinueBrowsingL();
+        }
+        
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ContinueBrowsingL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::ContinueBrowsingL()
+    {
+    LOG_ENTERFN( "CWsfModel::ContinueBrowsingL(void)" );
+    iBrowserLauncher->ContinueBrowsingL();
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CWsfModel::ContinueBrowsingL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::ContinueBrowsingL( TUint32 aIapId )
+    {
+    LOG_ENTERFN( "CWsfModel::ContinueBrowsingL(TUint32)" );
+    iBrowserLauncher->ContinueBrowsingL( *this, aIapId );
+    }    
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CreateAccessPointL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::CreateAccessPointL( TWsfWlanInfo& aWlan, 
+                                              TBool aExplicitDefine )
+    {
+    LOG_ENTERFN( "CWsfModel::CreateAccessPointL" );
+    if ( aExplicitDefine )
+        {
+        LOG_WRITE( "called from 'Define access point'" );
+        }
+    
+    CheckSpaceBelowCriticalLevelL();
+    CheckUnknownWapiL( aWlan );
+      
+    CWsfWlanIapWizard* iapWizard = CWsfWlanIapWizard::NewLC();
+    
+    // the wlaninfo must be persistent to avoid nullpointer crashes due to
+    // background refreshing 
+    TBool ret( ETrue );
+    
+    // query necessary data
+    if ( !iapWizard->LaunchWizardL( aWlan, aExplicitDefine ) )
+        {
+        LOG_WRITE( "iapWizard.LaunchWizardL failed" );
+        ret = EFalse;
+        }
+
+    // then create accesspoint
+    if ( ret )
+        {
+        if ( iapWizard->CreateAccessPointL() )
+            {
+            // copy back the IAP id
+            LOG_WRITEF( "IAP id = %d", aWlan.iIapId );
+            }
+        else
+            {
+            LOG_WRITE( "iapWizard.CreateAccessPointL failed" );
+            ret = EFalse;
+            }
+        }
+
+    CleanupStack::PopAndDestroy( iapWizard );
+    
+    return ret;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::RefreshScanL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::RefreshScanL()
+    {
+    LOG_ENTERFN( "CWsfModel::RefreshScanL" );
+    iRefreshing = iSession.RequestScanL();
+    LOG_WRITEF( "iRefreshing = %d", iRefreshing );
+    return iRefreshing;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::RefreshScan
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::RefreshScan( TPckgBuf<TBool>& aPckg, 
+                                       TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN( "CWsfModel::RefreshScan" );
+    iSession.RequestScan( aPckg, aStatus );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CloseHelperApplication
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::CloseHelperApplication()
+    {
+    LOG_ENTERFN( "CWsfModel::CloseHelperApplication" );
+    TBool endTaskCalled = EFalse;
+    // check if the app is already running ... and kill it.
+    TUid id( TUid::Uid( KHelperApUid.iUid ) );
+    TApaTaskList taskList( iEikEnv->WsSession() );
+    TApaTask task = taskList.FindApp( id );
+
+    if ( task.Exists() )
+        {
+        LOG_WRITE( "ending task" );
+        task.EndTask();
+        endTaskCalled = ETrue;
+        }
+    return endTaskCalled;
+    }
+
+    
+
+// ----------------------------------------------------------------------------
+// CWsfModel::LaunchHelperApplicationL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::LaunchHelperApplicationL( TWsfWlanInfo &aWlanInfo )
+    {
+    LOG_ENTERFN( "CWsfModel::LaunchHelperApplicationL" );
+    TPckgC<TWsfWlanInfo> param( aWlanInfo );
+    
+    TBuf8<sizeof( TWsfWlanInfo )> temp;
+    temp.Copy( param );
+    
+    TFileName fileName;
+    fileName.Copy( temp );
+    
+    RApaLsSession appArcSession;
+    
+    User::LeaveIfError( appArcSession.Connect() ); // connect to AppArc server
+    CleanupClosePushL( appArcSession );
+
+    // check if the app is already running ... and kill it.
+    TUid id( TUid::Uid( KHelperApUid.iUid ) );
+    TApaTaskList taskList( iEikEnv->WsSession() );
+    TApaTask task = taskList.FindApp( id );
+
+    if ( task.Exists() )
+        {
+        task.EndTask();
+        }    
+
+    TThreadId threadId;
+    User::LeaveIfError( appArcSession.StartDocument( fileName, TUid::Uid( 
+                                             KHelperApUid.iUid ), threadId ) );
+
+    CleanupStack::PopAndDestroy( &appArcSession );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CancelNotifyEvents
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::CancelNotifyEvents()
+    {
+    LOG_ENTERFN( "CWsfModel::CancelNotifyEvents" );
+    iSession.CancelNotifyEvent();
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::RequestNotifyEventsL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::RequestNotifyEventsL( 
+                                           MWsfStateChangeObserver& aObserver )
+    {
+    LOG_ENTERFN( "CWsfModel::RequestNotifyEventsL" );
+    iSession.NotifyEventL( aObserver );
+    }
+
+
+// ------------------------- From MWsfBrowserLaunchObserver -------------------
+    
+// ----------------------------------------------------------------------------
+// CWsfModel::BrowserLaunchFailed
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::BrowserLaunchFailed( TInt aError )
+    {
+    LOG_ENTERFN( "CWsfModel::BrowserLaunchFailed" );
+    LOG_WRITEF( "error = %d", aError );
+    
+    if ( iObserver )
+        {
+        iObserver->BrowserLaunchFailed( aError );    
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::BrowserLaunchCompleteL
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::BrowserLaunchCompleteL()
+    {
+    LOG_ENTERFN( "CWsfModel::BrowserLaunchCompleteL" );
+
+    iSession.MonitorAccessPointL( iConnectedIapId  );
+    
+    if ( iObserver )
+        {
+        iObserver->BrowserLaunchCompleteL();    
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::BrowserExitL
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::BrowserExitL()
+    {
+    LOG_ENTERFN( "CWsfModel::BrowserExitL" );
+    
+    // browser has been terminated, do the cleanup if necessary
+    iSession.SetIapPersistenceL( EIapForcedExpiry );
+    
+    if ( iObserver )
+        {
+        iObserver->BrowserExitL();    
+        }
+    }
+    
+// ------------------------- From MWsfScreenSaverStateObserver ----------------
+ 
+// ----------------------------------------------------------------------------
+// CWsfModel::ScreenSaverStatusChangedL
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::ScreenSaverStatusChangedL( const TBool aScreenSaverActive )
+    {
+    LOG_ENTERFN( "CWsfModel::ScreenSaverStatusChangedL" );
+    LOG_WRITEF( "status = %d", aScreenSaverActive );
+    if ( aScreenSaverActive )
+        {
+        iSession.DisableScanL();
+        }
+    else 
+        {
+        iSession.EnableScanL();
+        }
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CWsfModel::IsConnectedL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::IsConnectedL()
+    {
+    return iSession.IsConnectedL();
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CWsfModel::GetConnectedWlanDetailsL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CWsfModel::GetConnectedWlanDetailsL( TWsfWlanInfo& aWlanInfo )
+    {
+    return iSession.GetConnectedWlanDetailsL( aWlanInfo );
+    }
+
+// ----------------------------------------------------------------------------
+// CWsfModel::GetConnectedWlanDetails
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::GetConnectedWlanDetails( TPckgBuf<TBool>& aPckg,
+                                                   TWsfWlanInfo& aWlanInfo,
+                                                   TRequestStatus& aStatus )
+    {
+    iSession.GetConnectedWlanDetails( aPckg, aWlanInfo, aStatus );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::AbortConnectingL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::AbortConnectingL()
+    {
+    LOG_ENTERFN( "CWsfModel::AbortConnectingL" );
+    if ( iConnecting )
+        {
+        iSession.AbortConnectingL();
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::AbortScanningL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::AbortScanningL()
+    {
+    LOG_ENTERFN( "CWsfModel::AbortScanningL" );
+    if ( iRefreshing )
+        {
+        iSession.AbortScanningL();
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CheckSpaceBelowCriticalLevelL
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::CheckSpaceBelowCriticalLevelL() const
+    {
+    // OOD handling. If disk space is low user is notified.
+    RFs fs;
+    User::LeaveIfError( fs.Connect() );
+    CleanupClosePushL<RFs>( fs );
+    
+    // Checks the FFS space "after" addition
+    TBool belowCL = SysUtil::FFSSpaceBelowCriticalLevelL
+            ( &fs, KEstimatedOverhead );
+    
+    CleanupStack::PopAndDestroy(); // fs
+    
+    if( belowCL )
+        {
+        User::Leave( KErrDiskFull );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CheckUnknownWapiL
+// ----------------------------------------------------------------------------
+//
+void CWsfModel::CheckUnknownWapiL( TWsfWlanInfo& aWlan ) const
+    {    
+    if( !aWlan.Known() && aWlan.SecurityMode() == EWlanSecModeWAPI )
+        {
+        User::Leave( KErrWlanProtectedSetupSetupLocked );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CWsfModel::CheckIsIapIdValidL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfModel::CheckIsIapIdValidL( TUint aIapId ) const
+    {    
+    LOG_ENTERFN( "CWsfModel::CheckIsIapIdValidL" );
+    LOG_WRITEF( "Checking iapId= %d", aIapId );
+    if( aIapId )
+        {
+        RCmManagerExt cmManager;
+        cmManager.OpenL();
+        CleanupClosePushL( cmManager );        
+
+        RCmConnectionMethodExt cm = cmManager.ConnectionMethodL( aIapId );
+        cm.Close();
+        CleanupStack::PopAndDestroy( &cmManager );
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    }
+    
+// End of file