--- /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 <comms-infras/dbaccess.h>
+#include <wdbifwlansettings.h>
+#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<KCommsDbSvrMaxFieldLength> 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;
+ }
+