diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlansniffer/model/src/wsfmodel.cpp --- a/wlanutilities/wlansniffer/model/src/wsfmodel.cpp Thu Aug 19 10:59:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,787 +0,0 @@ -/* -* 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// 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& aPckg, - TRequestStatus& aStatus ) - { - LOG_ENTERFN( "CWsfModel::GetWlanListSize" ); - iSession.GetWlanListSize( aPckg, aStatus ); - } - - -// ---------------------------------------------------------------------------- -// CWsfModel::GetWlanList -// ---------------------------------------------------------------------------- -// -EXPORT_C void CWsfModel::GetWlanList( TPckgBuf& 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& 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& 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& 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 param( aWlanInfo ); - - TBuf8 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& 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( 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