wlan_bearer/wlanagent/src/wlanagtsm.cpp
changeset 0 c40eb8fe8501
--- /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;
+    }
+