connectionmonitoring/connmon/connectionmonitor/inc/CWlanSupport.h
changeset 0 5a93021fdf25
child 17 c14618f9de99
child 20 9c97ad6591ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/inc/CWlanSupport.h	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,794 @@
+/*
+* 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 "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:  Provides an interface to WLAN Engine.
+*
+*/
+
+#ifndef CONNMONCWLANSUPPORT_H
+#define CONNMONCWLANSUPPORT_H
+
+#include <wlanmgmtclient.h>
+#include <wlanscaninfo.h>
+#include <commsdat.h>
+#include <wlancontainer.h>
+#include <rconnmon.h>
+
+#include "ConnMonServ.h"
+#include "connmonwlannetwork.h"
+
+
+// Information Element ID for SSID as in 802.11.
+const TUint8 KWlan802Dot11SsidIE = 0;
+
+// Information Element ID for Rsn as in 802.11
+const TUint8 KWlan802Dot11RsnIE = 48;
+
+// Information Element ID for Wpa as in 802.11
+const TUint8 KWlan802Dot11WpaIE = 221;
+
+// Information Element ID for Vendor data as in 802.11
+const TUint8 KWlan802Dot11VendorSpecificIE = 221;
+
+// Bit mask for Capability info field to get type (Infra/AdHoc).
+const TUint8 KWlan802Dot11CapabilityEssMask = 0x0001;
+
+// Bit mask for Capability info field to get type (Infra/AdHoc).
+const TUint8 KWlan802Dot11CapabilityPrivacyMask = 0x0010;
+
+// Control header length for a beacon raw buffer in CWlanScanInfo.
+const TInt KWlanProbeControlHeaderLength = 12;
+
+enum TConnMonWlanRssClass
+     {
+     EConnMonWlanRssClassUnknown = 0,
+     EConnMonWlanRssClassWeak,
+     EConnMonWlanRssClassNormal
+     };
+
+class CConnMonServer;
+class CConnMonSession;
+class CWlanEvent;
+class CWlanSession;
+class CWlanGetScanResults;
+class CWlanGetSsidScanResults;
+
+
+/**
+* CWlanSupport
+*/
+NONSHARABLE_CLASS( CWlanSupport ) : public CBase
+    {
+public:
+    static CWlanSupport* NewL( CConnMonServer* aServer );
+    virtual ~CWlanSupport();
+
+public:
+    /**
+     * Gets the WLAN bearer availability information.
+     * @param aAvailability On return, contains WLAN availability (yes/no) information.
+     * @param aDoScan If this is set to ETrue scan results will be used instead of event info.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    void GetBearerAvailabilityL( TBool& aAvailability );
+
+    TInt GetBearerAvailabilityL( const RMessage2& aMessage, TBool& aAvailability );
+
+    /**
+     * Gets the the signal strength of the active WLAN connection.
+     * When there are no connections, gets the signal strength of
+     * the best available WLAN.
+     * @param aSignalStrength On return, contains the signal strength.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetSignalStrengthL( const RMessage2& aMessage, TInt& aSignalStrength );
+
+    /**
+     * Gets information on available WLAN networks (SSID, signal strength, type).
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetNetworkNamesL( const RMessage2& aMessage );
+
+    /**
+     * Parse WLAN network names from scan results.
+     * @since 5.0
+     * @param aScanInfo Contains WLAN scan results
+     * @param aNetInfo On return, contains information on available WLAN networks.
+     */
+    void ParseNetworkNamesL( CWlanScanInfo* aScanInfo, TConnMonNetworkNames& aNetInfo );
+
+    /**
+     * Appends available WLAN IAPs.
+     * @param aIapBuf On return, contains the available WLAN IAPs.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt AppendAvailableIaps( RArray<TUint>& aIdArray );
+
+    /**
+     * When a WLAN connection is up, appends all WLAN IAP IDs that have the same
+     * SSID as the current connection (SSID sharing), to the array given as
+     * argument. IAP info is read from CommsDat.
+     * @since 3.2
+     * @param aIapBuf On return, contains the available WLAN IAP IDs.
+     * @return KErrNone when successfull, KErrDisconnected if there is no active
+     * WLAN connection and otherwise a system wide error code.
+     */
+    TInt AppendAvailableIapsBySsidL( RArray<TUint>& aIdArray );
+
+    /**
+     * Gets network name as UNICODE.
+     * @param aSsid On return, contains the SSID as UNICODE.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetConnectionSsid( TDes& aSsid );
+
+    /**
+     * Gets connection mode (e.g. infra/ad hoc).
+     * @param aConnectionMode On return, contains the connection mode.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetConnectionMode( TInt& aConnectionMode );
+
+    /**
+     * Gets connection security mode.
+     * @param aConnectionSecurity On return, contains the connection security mode.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetConnectionSecurity( TInt& aConnectionSecurity );
+
+    /**
+     * Gets connection signal quality.
+     * @param aSignalQuality On return, contains the connection signal quality.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetConnectionSignalQuality( TInt& aSignalQuality );
+
+    /**
+     * Gets connection BSSID.
+     * @param aBssid On return, contains the connection BSSID.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetConnectionBssid( TBuf8<CConnMonWlanNetwork::KWlanBssId>& aBssid );
+
+    /**
+     * Gets the used transmit power.
+     * @param aPower On return, contains the used transmit power in mW.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetTransmitPower( TUint& aPower );
+
+    /**
+     * Activates WLAN Management API events.
+     * @return void.
+     */
+    void ActivateNotificationsL();
+
+    /**
+     * Cancels WLAN Management API events.
+     */
+    void CancelNotifications();
+
+    /**
+     * Gets information on available WLAN networks (SSID, signal strength, type).
+     * @param aWlanNetworks On return, contains information on available WLAN networks.
+     */
+    void GetWLANNetworksL( RConnMonWLANNetworksArray& aWlanNetworks );
+
+    /**
+     * Gets information on available WLAN networks (SSID, signal strength, type, BssId).
+     * @since 3.2
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetWlanNetworksL( const RMessage2& aMessage );
+
+    /**
+     * Parse WLAN networks information (SSID, signal strength, type, BssId).
+     * @since 5.0
+     * @param aScanInfo Contains WLAN scan results
+     * @param aWlanNetworks On return, contains information on available WLAN networks.
+     */
+    void ParseWlanNetworksL(
+            CWlanScanInfo* aScanInfo,
+            RConnMonWlanNetworksPtrArray& aWlanNetworks );
+
+    /**
+     * Ordering method of TConnMonNetwork class objects.
+     * @param aFirst First object for comparison
+     * @param aSecond Second object for comparison
+     * @return -1 if aFirst.iSignalStrength >  aSecond.iSignalStrength
+     *          1 if aFirst.iSignalStrength <  aSecond.iSignalStrength
+     *          0 if aFirst.iSignalStrength == aSecond.iSignalStrength
+     */
+    static TInt CompareNetworkStrengths(
+            const TConnMonNetwork& aFirst,
+            const TConnMonNetwork& aSecond );
+
+    /**
+     * Gets current WLAN networks information (SSID, signal strength, type, BssId).
+     * @since 5.0
+     * @param aWlanNetwork On return, contains information on current WLAN network.
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetCurrentWlanNetworkL( RConnMonWlanNetworksPtrArray& aWlanNetwork );
+
+    /**
+     * Gets WLAN probe raw buffers.
+     * @since 5.0
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetWlanProbeRawBuffersL( const RMessage2& aMessage );
+
+    /**
+     * Parse WLAN networks probe raw buffers.
+     * @since 5.0
+     * @param aScanInfo Contains WLAN scan results
+     * @param aWlanProbeRawBuffers On return, contains WLAN probe raw buffers.
+     */
+    void ParseWlanProbeRawBuffersL(
+            CWlanScanInfo* aScanInfo,
+            RConnMonWlanProbeRawBuffersPtrArray& aWlanProbeRawBuffers );
+
+    /**
+     * Gets SSID specific WLAN network information (SSID, signal strength, type, BssId).
+     * @since 5.0
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetWlanSsidNetworksL( const RMessage2& aMessage );
+
+    /**
+     * Enables WLAN scan for the next iap availability query.
+     */
+    void EnableWlanScan() { iEnableScan = ETrue; };
+
+    /**
+     * Check WLAN session index.
+     * @since 5.0
+     * @param aSessionId Session specific ID to compare array IDs
+     * @return index number or system wide error code.
+     */
+    TInt WlanSessionIndex( CConnMonSession* aSessionId );
+
+    /**
+     * Add WLAN session.
+     * @since 5.0
+     * @param aMessage Client message
+     * @return index number for the session in the WLAN sessions array
+     */
+    TInt AddWlanSessionL( const RMessage2& aMessage );
+
+    /**
+     * Delete WLAN session.
+     * @since 5.0
+     * @param aMessage Client message
+     */
+    void DeleteWlanSession( CConnMonSession* aSessionId );
+
+    /**
+     * Sets WLAN TInt attribute (KWlanScanCacheLifeTime).
+     * @since 5.0
+     * @param aAttribute Attribute to be set
+     * @param aValue Value to be set
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt SetIntAttributeL( const RMessage2& aMessage, const TInt aValue );
+
+    /**
+     * Sets WLAN TUint attribute (KWlanScanMaxDelay).
+     * @since 5.0
+     * @param aAttribute Attribute to be set
+     * @param aValue Value to be set
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt SetUintAttributeL( const RMessage2& aMessage, const TUint aValue );
+
+    /**
+     * Gets WLAN TInt attribute (KWlanScanCacheLifeTime).
+     * @since 5.0
+     * @param aAttribute Attribute to be get
+     * @param aValue On return contains the value of attribute
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetIntAttributeL( const RMessage2& aMessage, TInt& aValue );
+
+    /**
+     * Gets WLAN TUInt attribute (KWlanScanMaxDelay).
+     * @since 5.0
+     * @param aAttribute Attribute to be get
+     * @param aValue On return contains the value of attribute
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetUintAttributeL( const RMessage2& aMessage, TUint& aValue );
+
+    /**
+     * Sets WLAN String attribute (KWlanSsid etc).
+     * @since 5.0
+     * @param aAttribute Attribute to be set
+     * @param aValue Value to be set
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt SetStringAttributeL( const RMessage2& aMessage, const TDes& aValue );
+
+    /**
+     * Gets WLAN String attribute (KWlanSsid etc).
+     * @since 5.0
+     * @param aAttribute Attribute to be get
+     * @param aValue Value to be get
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt GetStringAttributeL( const RMessage2& aMessage, TDes& aValue );
+
+    /**
+     * Cancel all client asynch requests for WLAN engine.
+     * @since 5.0
+     * @param aMessage Client message
+     * @return KErrNone when successfull, otherwise a system wide error code.
+     */
+    TInt CancelAsyncRequest( const RMessage2& aMessage );
+
+    /**
+     * Enables sending of WLAN events to clients. Set when there is a client
+     * listening to events.
+     *
+     * @since S60 v5.2
+     */
+    void EnableEventsToClients();
+
+    /**
+     * Disables sending of WLAN events to clients. Set when there is no longer
+     * any clients listening to events.
+     *
+     * @since S60 v5.2
+     */
+    void DisableEventsToClients();
+
+    /**
+     * Checks if sending of events to clients is enabled.
+     *
+     * @since S60 v5.2
+     * @return ETrue if events are enabled, EFalse otherwise.
+     */
+    TBool EventsToClientsEnabled();
+
+    /**
+     * Checks the class of the WLAN received signal strength, based on WLAN
+     * engine events. Returns EFalse only if a weak signal event has been
+     * received from WLAN engine.
+     *
+     * @since S60 v5.2
+     * @return EFalse if signal level is weak (for certain), ETrue otherwise.
+     */
+    TBool WlanRssGoodEnough();
+
+private:
+    CWlanSupport( CConnMonServer* aServer );
+
+    /**
+     * Second phase construction.
+     */
+    void ConstructL();
+
+private: // Data
+    // Pointer to server module
+    CConnMonServer* iServer;
+
+    // WLAN Management API handle
+    CWlanMgmtClient* iWlanMgmt;
+
+    // WLAN event watcher object
+    CWlanEvent* iEventWatcher;
+
+    // Stores available WLAN iaps until next scan
+    RArray<TUint> iAvailableWlanIapsCache;
+
+    // Scan is allowed when ETrue. Initialized to ETrue in constructor.
+    TBool iEnableScan;
+
+    // Pointer table to session specific WLAN data objects
+    RPointerArray<CWlanSession> iWlanSessionsPtrArray;
+
+    // Event sending status
+    TBool iEnableEventsToClients;
+    };
+
+/**
+* CWlanEvent
+*/
+NONSHARABLE_CLASS( CWlanEvent ) : public CBase, public MWlanMgmtNotifications
+    {
+public:
+    static CWlanEvent* NewL( CWlanSupport* aWlanSupport, CConnMonServer* aServer );
+    virtual ~CWlanEvent();
+
+public:
+    TBool WlanAvailability() { return iWlanAvailable; }
+    TBool HasAvailabilityKnowledge() { return iHasAvailabilityKnowledge; }
+    TUint TxPower() { return iTxPower; }
+    TUint RssClass() { return iRssClass; }
+    TUint Rss() { return iRss; }
+
+public: // From MWlanMgmtNotifications
+    /**
+     * New networks have been detected during scan.
+     */
+    void NewNetworksDetected();
+
+    /**
+     * One or more networks have been lost since the last scan.
+     */
+    void OldNetworksLost();
+
+    /**
+     * The used transmit power has been changed.
+     * @param aPower The transmit power in mW.
+     */
+    void TransmitPowerChanged( TUint aPower );
+
+    /**
+     * Connection status has changed.
+     *
+     * @since S60 v5.2
+     * @param aNewState specifies the new connection state.
+     */
+    void ConnectionStateChanged( TWlanConnectionMode aNewState );
+
+    /**
+     * Received signal strength level has been changed.
+     *
+     * @since S60 v5.2
+     * @param aRssClass specifies the current class of the received signal.
+     * @param aRss RSS level in absolute dBm values.
+     */
+    void RssChanged( TWlanRssClass aRssClass, TUint aRss );
+
+private:
+    // Constructor
+    CWlanEvent( CWlanSupport* aWlanSupport, CConnMonServer* aServer );
+
+private: // Data
+    // Pointer to WLAN support object
+    CWlanSupport* iWlanSupport;
+
+    // Pointer to server object
+    CConnMonServer* iServer;
+
+    // WLAN bearer availability information. Valid only after
+    // 'iHasAvailabilityKnowledge' has been set to true.
+    TBool iWlanAvailable;
+
+    // When this flag is true, it means the 'iWlanAvailable' flag has a correct
+    // value. The flag is set to true after the first NewNetworksDetected or
+    // OldNetworksLost event is received.
+    TBool iHasAvailabilityKnowledge;
+
+    // The used transmit power in mW.
+    TUint iTxPower;
+
+    // The RSS class (unknown/weak/normal) for the current WLAN connection.
+    TInt iRssClass;
+
+    // The RSS (in absolute dBm) for the current WLAN connection. Updated by
+    // events, so not always accurate (depends on event thresholds).
+    TUint iRss;
+    };
+
+
+/**
+* CWlanSession
+* @since 5.0
+*/
+NONSHARABLE_CLASS( CWlanSession ) : public CBase
+    {
+public:
+    static CWlanSession* NewL( CConnMonSession* aSessionId, CWlanSupport* aWlanSupport );
+    virtual ~CWlanSession();
+
+public:
+    /**
+     * Get client WLAN session ID.
+     * @return CConnMonSession*.
+     */
+    inline CConnMonSession* GetSessionId() { return iSessionId; }
+
+    /**
+     * Set client WLAN session ID.
+     * @param aSessionId The session ID of the client.
+     */
+    inline void SetSessionId( CConnMonSession* aSessionId ) { iSessionId = aSessionId; }
+
+    /**
+     * Get client WLAN scan max delay.
+     * @return iWlanScanMaxDelay.
+     */
+    inline TUint GetWlanScanMaxDelay() { return iWlanScanMaxDelay; }
+
+    /**
+     * Set client WLAN scan max delay.
+     * @param aWlanScanMaxDelay Client WLAN scan max delay.
+     */
+    inline void SetWlanScanMaxDelay( const TUint& aWlanScanMaxDelay )
+        {
+        iWlanScanMaxDelay = aWlanScanMaxDelay;
+        }
+
+    /**
+     * Get client WLAN scan cache lifetime.
+     * @return iWlanScanCacheLifetime.
+     */
+    inline TInt GetWlanScanCacheLifetime() { return iWlanScanCacheLifetime; }
+
+    /**
+     * Set client WLAN scan cache lifetime. This is used if KWlanScanMaxDelay is set to 0.
+     * Any negative value will be changed to -1. This means WLAN engine will use the default
+     * device setting for cache lifetime value.
+     * @param aWlanScanCacheLifetime Client WLAN scan cache lifetime.
+     */
+    void SetWlanScanCacheLifetime( const TInt& aWlanScanCacheLifetime );
+
+    /**
+     * Get client WLAN SSID.
+     * @param aWlanSsid On return contais client SSID.
+     */
+    inline void GetWlanSsid( TBuf8<CConnMonWlanNetwork::KMaxNameLength>& aWlanSsid )
+        {
+        aWlanSsid = iWlanSsid;
+        }
+
+    /**
+     * Set client WLAN SSID.
+     * @param aWlanSsid Client WLAN SSID to be set.
+     */
+    inline void SetWlanSsid( const TBuf8<CConnMonWlanNetwork::KMaxNameLength>& aWlanSsid )
+        {
+        iWlanSsid = aWlanSsid;
+        }
+
+    /**
+     * Get WLAN scan result from WLAN engine.
+     * @param aMessage Client request message.
+     */
+    void GetScanResultsL( const RMessage2& aMessage );
+
+    /**
+     * Get WLAN SSID scan result from WLAN engine.
+     * @param aMessage Client request message.
+     */
+    TInt GetSsidScanResultsL( const RMessage2& aMessage );
+
+    /**
+     * Complete all pending asynch requests to client.
+     * @param aStatus Status of the scan.
+     * @param aScanInfo Object containing scan results.
+     * @param aSsidScan Flag telling if it was SSID scan.
+     */
+    void CompleteActiveRequestsL(
+            const TInt aStatus,
+            CWlanScanInfo* aScanInfo,
+            const TBool aSsidScan = EFalse );
+
+    /**
+     * Complete GetBearerAvailabilityRequest to client.
+     * @param aScanInfo Object containing scan results.
+     * @param aIndex Index of the pending message table.
+     */
+    void CompleteGetBearerAvailabilityRequest(
+            CWlanScanInfo* aScanInfo,
+            const TUint aIndex );
+
+    /**
+     * Complete GetSignalStrengthRequest to client.
+     * @param aScanInfo Object containing scan results.
+     * @param aIndex Index of the pending message table.
+     */
+    void CompleteGetSignalStrengthRequest(
+            CWlanScanInfo* aScanInfo,
+            const TUint aIndex );
+
+    /**
+     * Complete GetNetworkNamesRequest to client.
+     * @param aScanInfo Object containing scan results.
+     * @param aIndex Index of the pending message table.
+     */
+    void CompleteGetNetworkNamesRequestL(
+            CWlanScanInfo* aScanInfo,
+            const TUint aIndex );
+
+    /**
+     * Complete GetWlanNetworksRequest to client.
+     * @param aScanInfo Object containing scan results.
+     * @param aIndex Index of the pending message table.
+     */
+    void CompleteGetWlanNetworksRequestL(
+            CWlanScanInfo* aScanInfo,
+            const TUint aIndex );
+
+    /**
+     * Complete GetWlanSsidNetworksRequest to client.
+     * @param aScanInfo Object containing scan results.
+     * @param aIndex Index of the pending message table.
+     */
+    void CompleteGetWlanSsidNetworksRequestL(
+            CWlanScanInfo* aScanInfo,
+            const TUint aIndex );
+
+    /**
+     * Complete GetWlanProbeRawBuffersRequest to client.
+     * @param aScanInfo Object containing scan results.
+     * @param aIndex Index of the pending message table.
+     */
+    void CompleteGetWlanProbeRawBuffersRequestL(
+            CWlanScanInfo* aScanInfo,
+            const TUint aIndex );
+
+    /**
+     * Cancel active asynch requests.
+     * @param aReqType Request type to be cancelled
+     */
+    void CancelActiveRequests( const TInt aReqType );
+
+    /**
+     * Completes all wlan requests of certain type with the given error code.
+     * @since S60 5.2
+     * @param aErrorCode The error code.
+     * @param aSsidScan Flag to distinguish between SSID scan based requests
+     * and normal scan based requests.
+     */
+    void CompleteActiveRequestsWithError(
+            const TInt aErrorCode,
+            const TBool aSsidScan = EFalse );
+
+private:
+    // Constructor
+    CWlanSession( CConnMonSession* aSessionId, CWlanSupport* aWlanSupport );
+
+private: // Data
+    // Session ID
+    CConnMonSession* iSessionId;
+
+    // Pointer to WLAN support object
+    CWlanSupport* iWlanSupport;
+
+    // GetScanResults AO
+    CWlanGetScanResults* iGetScanResultsAO;
+
+    // GetSsidScanResults AO
+    CWlanGetSsidScanResults* iGetSsidScanResultsAO;
+
+    // WLAN scan max delay
+    TUint iWlanScanMaxDelay;
+
+    // WLAN scan cache lifetime
+    TInt iWlanScanCacheLifetime;
+
+    // WLAN SSID descriptor
+    TBuf8<CConnMonWlanNetwork::KMaxNameLength> iWlanSsid;
+
+    // Table for pending async. requests
+    RArray<RMessage2> iWlanRequestsArray;
+    };
+
+
+/**
+* CWlanGetScanResults
+* @since 5.0
+*/
+NONSHARABLE_CLASS( CWlanGetScanResults ) : public CActive
+    {
+public:
+    static CWlanGetScanResults* NewL( CWlanSession* aWlanSession );
+    ~CWlanGetScanResults();
+
+public:
+    /**
+     * Requests a new event (scan done) from WLAN.
+     * @since 5.0
+     */
+    void StartL();
+
+private:
+    // Constructor
+    CWlanGetScanResults( CWlanSession* aWlanSession );
+
+    // Second phase constructor
+    void ConstructL();
+
+private:
+    /**
+     * From CActive Cancels the asyncronous request from WLAN engine
+     * @since 5.0
+     */
+    void DoCancel();
+
+    /**
+     * From CActive Handles the the event that has arrived from WLAN.
+     * @since 5.0
+     */
+    void RunL();
+
+    /**
+     * From CActive, handles leaves from RunL.
+     * @since S60 5.2
+     * @param aLeaveCode The leave code.
+     */
+    TInt RunError( TInt aLeaveCode );
+
+private: // Data
+    // WlanSession pointer
+    CWlanSession* iWlanSession;
+
+    // WLAN Management API handle
+    CWlanMgmtClient* iWlanMgmt;
+
+    // Scan info
+    CWlanScanInfo* iScanInfo;
+    };
+
+
+/**
+* CWlanGetSsidScanResults
+* @since 5.0
+*/
+NONSHARABLE_CLASS( CWlanGetSsidScanResults ) : public CActive
+    {
+public:
+    static CWlanGetSsidScanResults* NewL( CWlanSession* aWlanSession );
+    ~CWlanGetSsidScanResults();
+
+public:
+    /**
+     * Requests a new event (scan done) from WLAN.
+     * @since 5.0
+     * @param
+     */
+    void StartL( TBuf8<CConnMonWlanNetwork::KMaxNameLength>& aWlanSsid );
+
+private:
+    // Constructor
+    CWlanGetSsidScanResults( CWlanSession* aWlanSession );
+
+    // Second phase constructor
+    void ConstructL();
+
+private:
+    /**
+     * From CActive Cancels the asyncronous request from WLAN engine
+     * @since 5.0
+     */
+    void DoCancel();
+
+    /**
+     * From CActive Handles the the event that has arrived from WLAN.
+     * @since 5.0
+     */
+    void RunL();
+
+    /**
+     * From CActive, handles leaves from RunL.
+     * @since S60 5.2
+     * @param aLeaveCode The leave code.
+     */
+    TInt RunError( TInt aLeaveCode );
+
+private: // Data
+    // WlanSession pointer
+    CWlanSession* iWlanSession;
+
+    // WLAN Management API handle
+    CWlanMgmtClient* iWlanMgmt;
+
+    // Scan info
+    CWlanScanInfo* iScanInfo;
+    };
+
+#endif // CONNMONCWLANSUPPORT_H
+
+// End-of-file