diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanagent/src/wlanagtsm.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanagent/src/wlanagtsm.cpp Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2002-2009 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 WLAN Agent statemachine framework +* +*/ + +/* +* %version: 11 % +*/ + +#include +#include +#include "am_debug.h" +#include "wlanagtsm.h" +#include "wlanagtstates.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CWlanSM::NewL +// ----------------------------------------------------------------------------- +// +CWlanSM* CWlanSM::NewL( + MAgentNotify& aObserver, + CDialogProcessor* aDlgPrc, + CCommsDbAccess& aDbAccess ) + { + DEBUG( "CWlanSM::NewL()" ); + CWlanSM* self = new (ELeave) CWlanSM(aObserver, aDlgPrc, aDbAccess); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::CWlanSM +// ----------------------------------------------------------------------------- +// +CWlanSM::CWlanSM( + MAgentNotify& aObserver, + CDialogProcessor* aDlgPrc, + CCommsDbAccess& aDbAccess ) : + CAgentSMBase( aObserver, aDlgPrc, aDbAccess ), + iWlanSettings( NULL ), + iServiceId( 0 ), + iWLMOverrideSettings( NULL ), + iIapId( 0 ), + iIsHotSpotAP (EFalse) + { + DEBUG( "CWlanSM constructor" ); + } + +// ----------------------------------------------------------------------------- +// CWlanSM::ConstructL +// ----------------------------------------------------------------------------- +// +void CWlanSM::ConstructL() + { + DEBUG( "CWlanSM::ConstructL()" ); + + TRAPD( err, DoConstructL() ); + + if( err == KErrNone ) + { + TWlanConnectionState state = iWLMServer.GetConnectionState(); + + DEBUG1( "CWlanSM::ConstructL() - WLAN engine state is %u", state ); + + if( state == EWlanStateNotConnected ) + { + iState = new(ELeave) CWlanStartState( this, iWLMServer ); + } + else + { + iState = new(ELeave) CWlanWaitConnectionState( this, iWLMServer ); + } + } + else + { +#ifdef _DEBUG + User::InfoPrint(_L("wlanagt: state machine creation error")); +#endif + iState = new(ELeave) CWlanErrorState( this, KErrCouldNotConnect ); + } + } + +// ----------------------------------------------------------------------------- +// CWlanSM::DoConstructL +// ----------------------------------------------------------------------------- +// +void CWlanSM::DoConstructL() + { + DEBUG( "CWlanSM::DoConstructL()" ); + User::LeaveIfError(iWLMServer.Connect()); + + // Check the service type in current IAP, must be LANService. + TBuf serviceType; + Db()->GetDesL( TPtrC( IAP ), TPtrC( IAP_SERVICE_TYPE ), serviceType ); + if( serviceType != TPtrC( LAN_SERVICE ) ) + { + User::Leave(KErrCorrupt); + } + + // Get the current IAP id + Db()->GetIntL( TPtrC( IAP ), TPtrC( COMMDB_ID ), iIapId ); + DEBUG1("iap id:%d", iIapId); + + // Get the service ID from the IAP table + Db()->GetIntL( TPtrC( IAP ), TPtrC( IAP_SERVICE ), iServiceId ); + DEBUG1("service id:%d", iServiceId); + + iWlanSettings = new (ELeave) SWLANSettings; + + CWLanSettings* wlansettings = new (ELeave) CWLanSettings(); + CleanupStack::PushL( wlansettings ); + User::LeaveIfError( wlansettings->Connect() ); + + // Get the "IAP specific WLAN settings" for this LAN service ID + TInt err = wlansettings->GetWlanSettingsForService( iServiceId, *iWlanSettings ); + wlansettings->Disconnect(); + + // wlansettings->Disconnect() need to be called also if wlansettings-> + // GetWlanSettingsForService() returns an error. This is why we didn't use + // User::LeaveIfError() above directly. + User::LeaveIfError(err); + + CleanupStack::PopAndDestroy( wlansettings ); + } + +// ----------------------------------------------------------------------------- +// CWlanSM::GetExcessData +// ----------------------------------------------------------------------------- +// +TInt CWlanSM::GetExcessData(TDes8& /*aBuffer*/) + { + DEBUG( "CWlanSM::GetExcessData()" ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::Notification +// ----------------------------------------------------------------------------- +// +TInt CWlanSM::Notification(TNifToAgentEventType /*aEvent*/, TAny* /*aInfo*/) + { + DEBUG( "CWlanSM::Notification()" ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::SetOverrideSettingsL +// ----------------------------------------------------------------------------- +// +void CWlanSM::SetOverrideSettingsL(const TWLMOverrideSettings& aWLMOverrideSettings) + { + if(!iWLMOverrideSettings) + { + iWLMOverrideSettings = new (ELeave) TWLMOverrideSettings; + } + + iWLMOverrideSettings->settingsMask = aWLMOverrideSettings.settingsMask; + iWLMOverrideSettings->ssid = aWLMOverrideSettings.ssid; + iWLMOverrideSettings->bssid = aWLMOverrideSettings.bssid; + iWLMOverrideSettings->wep = aWLMOverrideSettings.wep; + iWLMOverrideSettings->wpaPsk = aWLMOverrideSettings.wpaPsk; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::~CWlanSM +// ----------------------------------------------------------------------------- +// +CWlanSM::~CWlanSM() + { + DEBUG( "CWlanSM destructor" ); + + delete iWlanSettings; + delete iWLMOverrideSettings; + + iWLMServer.Close(); + + } + +// ----------------------------------------------------------------------------- +// CWlanSM::WlanSettings +// ----------------------------------------------------------------------------- +// +const SWLANSettings* CWlanSM::WlanSettings() const + { + return iWlanSettings; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::SettingsId +// ----------------------------------------------------------------------------- +// +TUint32 CWlanSM::SettingsId() const + { + return iServiceId; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::IapId +// ----------------------------------------------------------------------------- +// +TUint32 CWlanSM::IapId() const + { + return iIapId; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::SetHotSpotAP +// ----------------------------------------------------------------------------- +// +void CWlanSM::SetHotSpotAP(TBool aHotSpotAP) + { + iIsHotSpotAP = aHotSpotAP; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::IsHotSpotAP +// ----------------------------------------------------------------------------- +// +TBool CWlanSM::IsHotSpotAP() const + { + return iIsHotSpotAP; + } + +// ----------------------------------------------------------------------------- +// CWlanSM::OverrideSettings +// ----------------------------------------------------------------------------- +// +TWLMOverrideSettings* CWlanSM::OverrideSettings() const + { + return iWLMOverrideSettings; + } +