wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h
changeset 0 c40eb8fe8501
child 3 6524e815f76f
child 13 ab7247ff6ef9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,1360 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Main server
+*
+*/
+
+/*
+* %version: 49 %
+*/
+
+#ifndef WLMSERVER_H
+#define WLMSERVER_H
+
+#include <wdbifwlansettings.h>  // Used in SIAPSettings.
+
+#include "abs_core_server_callback.h"
+#include "abs_core_server.h"
+#include "abs_wlan_eapol_callback.h"
+#include "wlanscanproviderinterface.h"
+#include "core_server.h"
+#include "wlmnotification.h"
+#include "wlandevicesettings.h"
+#include "wlanscanresultcache.h"
+#include "wlmplatform.h"
+#include "umac_types.h" // TIndication
+#include "wlanconversionutil.h"
+#include "wlancontrolinterface.h"
+#include "wlaneapolinterface.h"
+#include "wlaneapolclient.h"
+#include "wlangenericplugin.h"
+#include "wlantimerservices.h"
+#include "wlancbwaiter.h"
+
+class CWlmDriverIf;
+class CWlanSsidListDb;
+
+/**
+ * Command Ids to be used un the asynchronous core service requests
+ * External commands coming from clients get request id that is > KWlanExtCmdBase
+ * Values 0-KWlanExtCmdBase are reserved for internal usage.
+ */
+const TUint32 KWlanIntCmdNull = 0;
+const TUint32 KWlanIntCmdBackgroundScan = 1;
+const TUint32 KWlanIntCmdEnableWlan = 2;
+const TUint32 KWlanIntCmdDisableWlan = 3;
+const TUint32 KWlanIntCmdSetPowerSave = 4;
+const TUint32 KWlanExtCmdBase = 100;
+
+/** Timer interval value for disabling background scan. */
+const TInt KBackgroundScanIntervalNever = 0;
+
+/** UID for WLAN Power Save Test Notifier */
+const TUid KUidWlanPowerSaveTestNote = { 0x101F6D4F };
+
+/**
+* The server for WLAN services. Counterpart of RWLMServer.
+*
+* @lib wlmserversrv.lib
+* @since Series 60 3.0
+*/
+NONSHARABLE_CLASS( CWlmServer ) : 
+    public CServer2, 
+    public abs_core_server_callback_c, 
+    public MWlmPlatformCallback,
+    public MWlanEapolCallbackInterface,
+    public MWlanScanResultProvider
+    {
+    public:  // Constructors and destructor
+
+        /** 
+         * map entry is used for queuing service requests
+         */
+        struct SRequestMapEntry
+            {
+            u32_t iRequestId;
+            TUint iSessionId;
+            RMessagePtr2 iMessage;
+            TWLMCommands iFunction;
+            TAny* iParam0;
+            TAny* iParam1;
+            TAny* iParam2;
+            TAny* iParam3;
+            TTime* iTime;
+
+            SRequestMapEntry() :
+                iRequestId( 0 ),
+                iSessionId( 0 ),
+                iMessage(),
+                iParam0( NULL ),
+                iParam1( NULL ),
+                iParam2( NULL ),
+                iParam3( NULL ),
+                iTime( NULL )
+                { }
+            };
+
+        /**
+         * Bit definitions for WLAN features.
+         */
+        enum TWlanFeature
+            {
+            /** Initialisation value. */
+            EWlanFeatureNone                = 0x00000000,
+            /** Whether WAPI is enabled. */
+            EWlanFeatureWapi                = 0x00000001,
+            /** Whether power save test is enabled. */
+            EWlanFeaturePowerSaveTest       = 0x00000002,
+            /** Whether 802.11k is enabled. */
+            EWlanFeature802dot11k           = 0x00000004
+            };
+
+        /**
+         * Two-phased constructor.
+         */
+        IMPORT_C static CWlmServer* NewL();
+        
+        /**
+         * Destructor.
+         */
+        virtual ~CWlmServer();
+
+    public: // New functions
+
+        /** 
+        * Initialises the server thread.
+        *
+        * The compilation macro is to ease to run the server as a
+        * thread and as a own process.
+        *
+        * @since Series 60 3.0
+        * @return Standard Symbian error.
+        */
+        IMPORT_C static TInt StartServerThread();
+        
+        /**
+        * Get the type of scan allowed.
+        * @return Type of scan allowed.
+        */
+        inline TWLMScanType GetScanType();
+
+        /**
+        * SetIconState sets the status of WLAN icon on cover display.
+        * @param aStatus The WLAN icon status.
+        * @return Symbian error code.
+        */
+        inline TInt SetIconState( TWlmIconStatus aStatus );
+        
+        /**
+        * Find out the IAP to join to.
+        * @param aLanServiceId  ID of the WLAN IAP settings to been joined.
+        * @param aWlanSettings  (OUT) The WLAN IAP settings.
+        * @param aSecondaryList (OUT) List of secondary SSIDs.
+        */
+        void GetIapSettingsL(
+            const TUint32 aLanServiceId,
+            SWLANSettings& aWlanSettings,
+            RArray<TWlanSecondarySsid>& aSecondaryList );
+            
+        /**
+        * Update the availability information.
+        * @param aAvailability Availability information for the
+        *                      Connection Monitor server.
+        * @param aNetNetworksDetected Whether new networks have been detected.
+        * @param aOldNetworksLost Whether one or more old networks have been lost.
+        */
+        inline void UpdateAvailability(
+            TBool aAvailability,
+            TBool aNewNetworksDetected = EFalse,
+            TBool aOldNetworksLost = EFalse );
+        
+        /**
+        * Callback function to receive notification about closed
+        * Broken Power Save Note dialog.
+        * @param aThisPtr Pointer to the server instance.
+        * @return error code
+        */
+        static TInt HandleBrokenPowerSaveNoteClosed(
+            TAny *aThisPtr );
+        
+        /**
+         * Notify changed PSM server mode
+         *
+         * @since Series 60 5.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void NotifyChangedPsmSrvMode(
+            TUint aSessionId,
+            const RMessage2& aMessage );    
+        
+    public: // Functions from base classes
+
+        /** 
+        * From abs_core_server_callback_c Send a notification.
+        * @param notification The notification to send.
+        * @param data_length  Optional data length.
+        * @param data         Pointer to optional data.
+        */
+        virtual void notify(
+            core_notification_e notification,
+            int_t data_length,
+            const u8_t* data );
+
+        /**
+         * From abs_core_server_callback_c 
+         * Notify about country information received from APs.
+         * @param request_id Identification of the corresponding request.
+         * @param found_region WLAN region information obtained from the AP's country information.
+         * @param inconsistent_info Information whether different APs gave inconsistent country information.
+         */
+        virtual void store_ap_country_info(
+        		u32_t request_id,
+        		const core_wlan_region_e& found_region,
+        	    bool_t inconsistent_info );        
+
+        /**
+        * From abs_core_server_callback_c 
+        * Get the current regulatory domain.
+        * @param request_id Identification of the corresponding request.
+        * @return Current regulatory domain.
+        * @param mcc_known Is the current mobile country code available
+        */
+        virtual void get_regulatory_domain(
+            u32_t request_id,
+            core_wlan_region_e& region,
+            bool_t& mcc_known );
+        
+        /**
+         * From abs_core_server_callback_c 
+         * An asynchronous request from the adaptation layer has been completed.
+         *
+         * @since S60 v3.1
+         * @param request_id Identification of the corresponding request.
+         * @param status Completion status of the request.
+         */
+        virtual void request_complete(
+            u32_t request_id,
+            core_error_e status );
+
+        /**
+         * From abs_core_server_callback_c 
+         * Cancel a pending asynchronous request.
+         * 
+         * @since S60 v3.1
+         * @param request_id Identification of the corresponding request.
+         */
+        virtual void cancel_request(
+            u32_t request_id );
+
+        /**
+         * From abs_core_server_callback_c 
+         * Initialize interface to EAPOL.
+         *
+         * @since S60 v3.2
+         * @param mode Operating mode to use.
+         * @param partner Pointer to partner instance.
+         * @return Status value of operation.
+         */
+        virtual u32_t load_eapol(
+            core_eapol_operating_mode_e mode,
+            abs_wlan_eapol_callback_c* const partner );
+    
+        /**
+         * From abs_core_server_callback_c 
+         * Shutdown EAPOL.
+         *
+         * @since S60 v3.2
+         * @return Status value of operation.
+         */
+        virtual u32_t shutdown();
+        
+        /**
+         * From abs_core_server_callback_c 
+         * Configure EAPOL.
+         *
+         * @since S60 v3.2
+         * @param header_offset Offset of EAP-header in packet_send.
+         * @param MTU Maximum transfer unit (MTU).
+         * @param trailer_length Length of trailer needed by lower levels..
+         * @return Status value of operation.
+         */
+        virtual u32_t configure(
+            const u32_t header_offset,
+            const u32_t MTU,
+            const u32_t trailer_length );
+
+        /**
+         * From abs_core_server_callback_c 
+         * Send data to EAPOL.
+         *
+         * @since S60 v3.2
+         * @param data Pointer to data to be send.
+         * @param length Length of data to be send.
+         * @return Status value of operation.
+         */
+        virtual u32_t process_data(
+            const void * const data,
+            const u32_t length );
+
+        /**
+        * From CServer2
+        * @since Series 60 3.0
+        * @param aVersion not used
+        * @param aMessage not used
+        * @return session object
+        */
+        virtual CSession2* NewSessionL(
+            const TVersion& aVersion,
+            const RMessage2& aMessage ) const;
+
+        /**
+        * @since Series 60 3.0
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        virtual void NotifyAdd(
+            CNotificationBase& aNotification );
+
+        /**
+        * @since Series 60 3.0
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        virtual void NotifyRemove(
+            CNotificationBase& aNotification );
+
+        /**
+         * Connect
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        virtual void Connect(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Cancel an outstanding connect request.
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        virtual void CancelConnect(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * GetCurrentBSSID
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void GetCurrentBSSID(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * GetCurrentRCPI
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void GetCurrentRCPI(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+        * @since Series 60 3.0
+        * @param aSessionId ID identifying the session.        
+        * @param aMessage containing the service request
+        */
+        virtual void GetCurrentSSID(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+        * GetCurrentSecurityMode
+        * @since Series 60 3.0
+        * @param aSessionId ID identifying the session.        
+        * @param aMessage containing the service request
+        */
+        virtual void GetCurrentSecurityMode(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * GetCurrentSystemMode
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void GetCurrentSystemMode(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Asks for connection state
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void GetConnectionState(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Performs scan
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void GetScanResult(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Cancel an outstanding scan request.
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void CancelGetScanResult(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Determines which IAPs are currently available
+         * @since Series 60 3.1
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void GetAvailableIaps(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Cancel an outstanding IAP availability request.
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void CancelGetAvailableIaps(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void ReleaseComplete(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+        * @since Series 60 3.0
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        virtual TUint NotifySessionCreated();
+
+        /**
+        * @since Series 60 3.0
+        * @param aSessionId ID identifying the session.
+        */
+        virtual void NotifySessionClosed( TUint aSessionId );
+
+        /**
+         * NotifyChangedSettings
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void NotifyChangedSettings(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * AddBssidToRoguelist
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void AddBssidToRoguelist(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+        
+        /**
+         * UpdateRcpNotificationBoundary
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void UpdateRcpNotificationBoundary(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+        
+        /**
+         * ConfigureMulticastGroup
+         * @since Series 60 3.0
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void ConfigureMulticastGroup(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get packet statistics of the current connection.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void GetPacketStatistics(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Clear packet statistics of the current connection.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */        
+        void ClearPacketStatistics(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get the current U-APSD settings.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void GetUapsdSettings(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Set the U-APSD settings.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void SetUapsdSettings(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get the current power save settings.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void GetPowerSaveSettings(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Set the power save settings.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void SetPowerSaveSettings(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Request creation of a traffic stream.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void CreateTrafficStream(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Cancel a pending traffic stream creation request.
+         *
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void CancelCreateTrafficStream(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Request deletion of a traffic stream.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void DeleteTrafficStream(
+            TUint aSessionId,
+            const RMessage2& aMessage );             
+
+        /**
+         * Cancel a pending traffic stream deletion request.
+         *
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        virtual void CancelDeleteTrafficStream(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get information about the current AP.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void GetAccessPointInfo(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get roam metrics of the current connection.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void GetRoamMetrics(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get a list of BSSIDs on the rogue list.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void GetRogueList(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get the current regulatory domain.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void GetRegulatoryDomain(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Get the current power save mode.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void GetPowerSaveMode(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+        
+        /**
+         * Run Protected Setup
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        virtual void RunProtectedSetup(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Cancel Protected Setup
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        virtual void CancelProtectedSetup(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Add a list of SSIDs to an IAP.
+         *
+         * @since Series 60 5.0.1
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void AddIapSsidListL(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Remove any list of SSIDs attached to an IAP.
+         *
+         * @since Series 60 5.0.1
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void RemoveIapSsidListL(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Set the power save mode.
+         *
+         * @since Series 60 5.0.1
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void SetPowerSaveMode(
+            TUint aSessionId,
+            const RMessage2& aMessage );        
+
+        /**
+         * Get the current traffic status for access classes.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.
+         * @param aMessage containing the service request
+         */
+        void GetAcTrafficStatus(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Initiate roam to the given BSSID.
+         *
+         * @since S60 v3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void DirectedRoam(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * Cancel a pending directed roam request.
+         *
+         * @since Series 60 3.2
+         * @param aSessionId ID identifying the session.         
+         * @param aMessage containing the service request
+         */
+        void CancelDirectedRoam(
+            TUint aSessionId,
+            const RMessage2& aMessage );
+
+        /**
+         * From MWlmPlatformCallback
+         * Send an indication to request data pipe disconnection.
+         *
+         * Calls ReleaseComplete() directly if data pipe isn't
+         * connected.
+         */
+        inline void ReleaseRequest();
+
+        /**
+         * From MWlmPlatformCallback
+         * GetCurrentState requests the current connection state.
+         * @since Series 60 3.0
+         * @return connection state
+         */
+        virtual TWlanConnectionState GetCurrentState();
+
+        /**
+         * From MWlmPlatformCallback 
+         * Enable WLAN functionality again
+         * (after it has been disabled by a system mode change)
+         * @since Series 60 3.0
+         */
+        inline void EnableWlan();
+
+        /**
+         * From MWlmPlatformCallback 
+         * BT connection has been established.
+         */
+        void BtConnectionEstablished();
+        
+        /**
+         * From MWlmPlatformCallback 
+         * BT connection has been disconnected.        
+         */
+        void BtConnectionDisabled();
+
+        /**
+         * From MWlmPlatformCallback 
+         * System startup has been completed.
+         */
+        void StartupComplete();
+
+        /**
+         * From MWlmPlatformCallback
+         * Emergency call was done during startup and now it has completed.
+         * @param aStartupCompleted Is the startup already completed 
+         */
+        void EmergencyCallComplete( TBool aStartupCompleted );
+
+        /**
+         * From MWlmPlatformCallback
+         * User has changed the time and therefore cached WLAN region is not
+         * valid anymore.
+         */
+        void SystemTimeChanged();
+
+        /**
+         * From MWlmPlatformCallback
+         * WLAN region cache is always cleared after defined time.
+         */
+        void ClearRegionCache();
+        
+        /**
+         * From MWlanEapolCallbackInterface
+         * Callback interface to partner.
+         *
+         * @since S60 v3.2
+         * @param aData Pointer to the data to be sent.
+         * @param aLength Length of the data to be sent.
+         * @return Return value is specified in interface specification.
+         */
+        TInt SendData(
+            const void * const aData, 
+            const TInt aLength );
+        
+        /**
+         * From MWlanScanResultProvider
+         * Issue scan request.
+         *
+         * @since S60 v5.2
+         * @param aMaxDelay Maximum amount of seconds the client is willing to wait for
+         *                  the availability results. The valid range is from 0 to 1200
+         *                  seconds.
+         */
+        void Scan( const TUint& aMaxDelay );
+
+        /**
+         * From MWlanScanResultProvider
+         * Cancel pending scan request.
+         *
+         * @since S60 v5.2
+         */        
+        void CancelScan();
+
+    private:
+
+        /**
+        * Read WLAN specific settings from Commdb.
+        * @param settings Settings are stored here.
+        */
+        void GetWlanSettingsL(
+            CWlanDeviceSettings::SWlanDeviceSettings& aSettings );
+
+        /**
+         * Take the cached WLAN region into use if it is still valid.
+         * @param region Cached WLAN region from CenRep.
+         * @param timestamp Timestamp for the cached WLAN region in CenRep.
+         */
+         void SetCachedRegion(
+             TUint32 region,
+             TInt32 timestamp);
+        
+        /**
+        * C++ default constructor.
+        */
+        CWlmServer();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+        /**
+         * Method called by the framework when a pending core
+         * request needs to be completed.
+         *
+         * @param aThisPtr Pointer to the server instance.
+         * @return error code
+         */       
+        static TInt HandleCoreAsynchCb( TAny* aThisPtr );
+
+        /**
+         * Method called by the scan scheduling timer when it expires.
+         * @param aThisPtr Pointer to the server instance.
+         * @return error code
+         */       
+        static TInt ScanSchedulingTimerExpired( TAny* aThisPtr );
+        
+        /**
+         * Handles the conversion of IAP data list.
+         * @param aCoreIapDataList Converted IAP data list.
+         * @param aCoreIapSsidList Converted secondary SSID list.
+         * @param aAmIapDataList IAP data list to be converted.
+         * @return KErrNone if success, an error otherwise.
+         */       
+        TInt GetIapDataList(
+            core_type_list_c<core_iap_data_s>& aCoreIapDataList,
+            core_type_list_c<core_ssid_entry_s>& aCoreIapSsidList,
+            const RArray<TWlanLimitedIapData>& aAmIapDataList );
+
+        /**
+         * Handles reading of lanservice table data related to service id.
+         * @param aLanServiceId specifying the lan service
+         * @param aLanSettings contains the results on completion
+         * @return error code
+         */       
+        TInt GetLanSettings(
+            TUint32 aLanServiceId, 
+            SLanSettings& aLanSettings );
+
+        /**
+         * Update WLAN settings from commsdat and CenRep.
+         *
+         * @return KErrNone if success, an error code otherwise.
+         */
+        TInt UpdateWlanSettings();
+        
+        /**
+         * Updates the background scan timing.
+         * @param aNewInterval specifies the new background scan interval in seconds
+         *        0 means background scan is off
+         * @param aNextExpiration specifies when the background scan should be performed next time.
+         */
+        void UpdateBackgroundScan( 
+            TUint32 aNewInterval,
+            TUint32 aNextExpiration );
+
+        /**
+         * Updates the scan scheduling timer.
+         * @param aScanTime specifies when the scan should be started.
+         * @param aTriggeringRequestId the id of that request which updates the timer.
+         */        
+        void UpdateScanSchedulingTimer( 
+        	TTime aScantime,
+        	TUint aTriggeringRequestId );
+
+        /**
+         * Finds the closest scan starting time from the pending scan requests in iPendingScanRequestMap.
+         * @param aTriggeringRequestIndex index of the scan request that should be handled next.
+         * @return if closest time was found.
+         */
+        TBool FindNextTimedScanSchedulingRequest( 
+        	TUint& aTriggeringRequestIndex );        
+
+        /**
+        * Notify the server that a background scan has been done.
+        */
+        void NotifyBackgroundScanDone( 
+            ScanList* aScanList, 
+            core_type_list_c<u32_t>* aIapIdList );
+
+        /**
+         * Check if this request can be completed.
+         * @param aCheckedMapEntry pointer to the request to be checked
+         * @param aCompletedMapEntry pointer to the request that was completed
+         * @return whether the request can be completed by core.
+         */
+        TBool CanRequestBeCompleted(
+            const SRequestMapEntry& aCheckedMapEntry,
+            const SRequestMapEntry& aCompletedMapEntry ) const;
+        
+        /**
+         * Handles completion routines of an internal request
+         * @param aIndex index to the request that should be completed.
+         * @param aStatus status of the completed operation.
+         * @param aCompletedWasTriggering value ETrue means that
+         *        completed request is the same as the request which
+         *        triggered the core operation 
+         */
+        void CompleteInternalRequest(
+            TUint32 aIndex,
+            core_error_e aStatus,
+            TBool aCompletedWasTriggering = ETrue );
+
+        /**
+         * Handles completion routines of an external request
+         * @param aIndex index to the request that should be completed.
+         * @param aStatus status of the completed operation.
+         * @param aTriggerRequest pointer to the request that triggered core operation
+         *        value NULL means that completed request is the same as the request which triggered 
+         *        the core operation 
+         */
+        void CompleteExternalRequest(
+            TUint32 aIndex, 
+            core_error_e aStatus,
+            SRequestMapEntry* aTriggerRequest = NULL );
+
+        /**
+         * Compare two available network entries.
+         * 
+         * @param aFirst First entry to compare.
+         * @param aSecond Second entry to compare.
+         * @return ETrue if equal, EFalse otherwise.
+         */
+        static TBool IsAvailableNetworkEqual(
+            const TWlanAvailableNetwork& aFirst,
+            const TWlanAvailableNetwork& aSecond );
+
+        /**
+         * Get list of networks in the scan results.
+         *
+         * @param aScanList Scan results to be parsed.
+         * @param aNetworkList List of networks is stored here.
+         * @return Symbian error code.
+         */
+        TInt GetNetworkList(
+            const ScanList& aScanList,
+            RArray<TWlanAvailableNetwork>& aNetworkList );
+
+        /**
+         * Send availability notification updates and update the icon
+         * if necessary.
+         *
+         * @param aNewNetworksDetected Whether new networks/IAPs have been detected.
+         * @param aOldNetworksLost Whether old networks/IAPs have been lost.
+         * @param aAnyNetworksDetected Whether any networks have been detected.
+         */
+        void UpdateAvailabilityInfo(
+            TBool aNewNetworksDetected,
+            TBool aOldNetworksLost,
+            TBool aAnyNetworksDetected );
+
+        /**
+         * Cancel a pending request.
+         *
+         * @param aSessionId ID of the session.
+         * @param aCommand Command to cancel.
+         */
+        void CancelExternalRequest(
+            TUint aSessionId,
+            TWLMCommands aCommand );
+
+        /**
+         * Check the given scan scheduling parameters and if the values are out of range
+         * set new values. If aCacheLifetime value is -1, read the value from device settings.
+         * @param aCacheLifetime how old cached results (in seconds) the client is willing to accept.
+         * @param aMaxDelay maximum time (in seconds) the client is willing to wait for the scan results.
+         */
+        void CheckScanSchedulingParameters(
+            TInt& aCacheLifetime,
+            TUint& aMaxDelay );
+        
+        /**
+         * Adds a background scan request to the scan scheduling queue.
+         * @param aScanStartInterval when the background scan request should be handled.
+         * @return was the request successfully made.
+         */
+        TInt BackgroundScanRequest(
+        	TUint aScanStartInterval );
+        
+        /**
+         * Check whether the phone is currently roaming.
+         *
+         * @return ETrue if the phone is currently roaming, EFalse otherwise.
+         */
+        inline TBool IsRoaming() const;
+
+        /**
+         * Check whether the given session is active.
+         *
+         * @param aEntry Session to be checked.
+         * @return ETrue if session is active, EFalse if it has been closed.
+         */
+        inline TBool IsSessionActive(
+            const SRequestMapEntry& aEntry ) const;
+
+        /**
+         * Calculate when the scanning should be started (= current moment in time + aDelay).
+         * @param aDelay Number of seconds to add to current moment in time.
+         * @return Calculated time.
+         */
+        inline TTime CalculateScanStartTime(
+            const TInt aDelay ) const;
+
+        /**
+         * Find the index of the entry that is related to aRequestId, returns count of entries
+         * in table if entry is not found.
+         * @param aRequestId request id that is searched
+         * @return TUint index to the iRequestMap entry that is related to given parameter
+         */
+        inline TUint FindRequestIndex(
+            const TInt aRequestId ) const;
+
+        /**
+         * Check if the given request is pending scan request and part of scan scheduling
+         * @param aIndex index to iRequestMap
+         * @return TBool Whether request is a pending scan request
+         */
+        inline TBool IsPendingScanRequest(
+            const TInt aIndex ) const;
+        
+        /**
+         * Check if the given request is pending timed scan request and part of scan scheduling
+         * @param aIndex index to iRequestMap
+         * @return TBool Whether request is a pending scan request
+         */
+        inline TBool IsPendingTimedScanRequest(
+        	const TInt aIndex ) const;
+        
+        /**
+         * Check if the given request is first pending scan request and part of scan scheduling
+         * @param aMapEntry entry in iRequestMap
+         * @return TBool Whether request is a pending scan request
+         */
+        TBool IsOnlyTimedScanRequestInRequestMap(
+        	const SRequestMapEntry& aMapEntry ) const;
+        
+        /**
+         * Check if there are any SSID lists defined and update availability
+         * results as needed.
+         *
+         * @param aMapEntry entry in iRequestMap 
+         */
+        void HandleSsidListAvailabilityL(
+            const SRequestMapEntry& aMapEntry );
+        
+        /**
+         * Store a key value to WLAN Central Repository.
+         *
+         * @param aKey Id of the WLAN Central Repository key.
+         * @param aValue Value to be written to the WLAN Central Repository key.
+         */
+        void StoreWlanCenRepKeyValueL( const TUint32 aKey, const TInt aValue ) const;
+        
+        /**
+         * Get a current IAP ID from Db.
+         *
+         * @param aLanServiceId Specifies the table row in wlansettings.
+         * @param aCoreIapData Specifies the IAP data structure to be 
+         * filled (i.e. IAP ID field to be filled for the structure).
+         */
+        TInt GetCurrentIapId( 
+            const TUint aLanServiceId, 
+            core_iap_data_s& aCoreIapData );
+
+    private:    // Data
+    
+        /**
+         * Pointer to core server
+         */
+        abs_core_server_c* iCoreServer;
+
+        /**
+         * Pointer to lower adaptation
+         * NOTE: This should be just passed on to core server,
+         * and let it handle communication towards this.
+         * (i.e. upper and lower adaptation layers should not interact directly)
+         */
+        CWlmDriverIf* iDriverIf;
+
+        /**
+         * Bitmap of supported WLAN features.
+         */
+        TUint iSupportedFeatures;
+
+        /**
+         * Timer creating periodic expirations.
+         * Used for starting scheduled scans
+         */
+        CPeriodic* iScanSchedulingTimer;
+
+        /**
+         * Cache for scanresults etc.
+         */
+        CWlanScanResultCache* iCache;
+        
+        /**
+         * Cache lifetime for scan results. This value is read from device settings.
+         */
+        TUint iConfiguredCacheLifetime;
+         
+        /** 
+         * Handle to platform client that observes and updates system statuses
+         */
+        CWlmPlatform* iPlatform;
+        
+        /** 
+         * List of clients who have subscribed notifications
+         */
+        RArray<CNotificationBase*> iNotificationArray;
+
+        /**
+         * Adaptation caches the connection state
+         */
+        TWlanConnectionState iConnectionState;
+
+        /**
+         * The previous connection state.
+         */
+        TWlanConnectionState iPrevConnectionState;
+
+        /**
+         * Whether the phone is currently roaming.
+         */
+        TBool iIsRoaming;
+        
+        /**
+         * Adaptation caches the RCPI value.
+         */        
+        TUint iPrevRcpiValue;
+
+        /**
+         * Current regulatory domain
+         */
+        TWlanRegion iRegion;
+
+        /**
+         * Time of the last domain query
+         */
+        TTime iTimeofDomainQuery;
+
+        /** 
+         * Number of open client sessions
+         */
+        TUint iClientSessionCount;
+        
+        /**
+         * RequestMap is an array containing pending service requests
+         */
+        RArray<SRequestMapEntry> iRequestMap;
+    
+        /** 
+         * requestId counter ensures that consecutive service requests get
+         * a unique identifier.
+         */
+        TUint32 iRequestIdCounter;
+
+        /**
+         * iSessionIdCounter is running counter for assigning an unique ID number
+         * for new a session.
+         */
+        TUint32 iSessionIdCounter;
+
+        /**
+         * Asynchronous callback for completing core server requests.
+         */        
+        CAsyncCallBack* iCoreAsynchCb;
+        
+        /**
+         * Request ID of the pending core server request.
+         */
+        TUint iCoreAsynchCbId;
+        
+        /**
+         * Status of the pending core server request.
+         */
+        core_error_e iCoreAsynchCbStatus;
+
+        /**
+         * Whether system startup has been completed.
+         */
+        TBool iIsStartupComplete;        
+        
+        /**
+         * EAPOL implementation instantiated via ECom plugin interface.
+         */        
+        CWlanEapolClient* iEapolClient;
+        
+        /**
+         * EAPOL callback handler in core.
+         */        
+        abs_wlan_eapol_callback_c* iEapolHandler;
+       
+        /**
+         * Time when the scan scheduling timer is set to expire.
+         */
+        TTime iScanSchedulingTimerExpiration;
+        
+        /**
+         * Request id to that request in the iRequestMap which has set the scan scheduling timer.
+         */
+        TUint iRequestTriggeringScanning;
+        
+        /**
+         * This flag is set when scan request is sent to Core and reset when Core has completed the request.
+         * Scan request can be either GetScanResults, GetAvailableIaps or BackgroundScan
+         */
+        TBool iCoreHandlingScanRequest;
+        
+        /**
+         * Power save mode requested from power save plugin. (Automatic/Light/Deep/None)
+         */
+        TWlanPowerSave iPowerSaveMode;
+        
+        /**
+         * Power save enabled selected by user. (True/False)
+         */
+        TBool iPowerSaveEnabled;
+        
+        /**
+         * Handler for Generic WLAN Plugins.
+         */
+        CGenericWlanPlugin iGenericWlanPlugin;
+        
+        /**
+         * Storage for SSID lists.
+         */
+        CWlanSsidListDb* iSsidListDb;
+        
+        /**
+         * Whether to show Broken Power Save Note.
+         */
+        TBool iShowBrokenPowerSaveNote;
+        
+        /**
+         * Active object handling the Broken Power Save Notifier.
+         */
+        CWlanCbWaiter* iBrokenPowerSaveNotifierWaiter;
+        
+        /**
+         * Notifier for displaying Broken Power Save Note dialog.
+         */
+        RNotifier iBrokenPowerSaveNotifier;
+
+        /**
+         * Reply from Broken Power Save Notifier.
+         */
+        TPckgBuf<TBool> iBrokenPowerSaveNotifierReply;
+        
+        /**
+         * Background scan provider.
+         */
+        MWlanBgScanProvider* iBgScanProvider;
+
+        /**
+         * Settings for background scan provider.
+         */
+        MWlanBgScanProvider::TWlanBgScanSettings iBgScanProviderSettings;
+        
+        /**
+         * Timer services.
+         */
+        CWlanTimerServices* iTimerServices;
+                
+    };
+    
+
+#include "wlmserver.inl"
+
+#endif // WLMSERVER_H
+            
+// End of File