wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtimpl.h
changeset 0 c40eb8fe8501
child 3 6524e815f76f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtimpl.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,819 @@
+/*
+* 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 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:  ECom interface implementation definition
+*
+*/
+
+/*
+* %version: 20 %
+*/
+
+#ifndef WLANMGMTIMPL_H
+#define WLANMGMTIMPL_H
+
+#include "rwlmserver.h"
+#include "genscanlist.h"
+#include "wlanmgmtclient.h"
+#include "wlanscaninfoimpl.h"
+
+const TInt32 KRssMin = 0;
+const TInt32 KRssMax = 100;
+const TInt32 KRssHysteresisMin = 0;
+const TInt32 KRssHysteresisMax = 100;
+
+class CWlanScanRequest;
+class CWlanAvailableIapsRequest;
+class CProtectedSetupRequest;
+
+/**
+ * Implementation for MWlanMgmtInterface interface.
+ *
+ * This class uses services from RWLMServer class to implement
+ * most of the required functionality.
+ *
+ * @lib wlanmgmtimpl.dll
+ * @since Series 60 3.0
+ */
+class CWlanMgmtImpl : public CWlanMgmtClient, public MWLMNotify
+    {
+    public:  // Methods
+
+       // Constructors and destructor
+        
+        /**
+         * Static constructor.
+         */
+        static CWlanMgmtImpl* NewL();
+        
+        /**
+         * Destructor.
+         */
+        virtual ~CWlanMgmtImpl();
+
+       // New methods
+        
+        /**
+         * Used to indicate completion of asynchronous scan request.
+         *
+         * @param aStatus Status of the request.
+         */
+        void ScanComplete(
+            TInt aStatus );
+
+        /**
+         * Used to indicate completion of asynchronous GetAvailableIaps() request.
+         *
+         * @param aStatus Status of the request.
+         */
+        void AvailableIapsComplete(
+            TInt aStatus );
+
+       // Methods from base classes
+
+        /**
+         * (From MWlanMgmtInterface) Activate the notification service.
+         * 
+         * After the client has enabled the notification service, it can
+         * receive asynchronous notifications from the server.
+         *
+         * @param aCallback The class that implements the callback interface.
+         */
+        virtual void ActivateNotificationsL(
+            MWlanMgmtNotifications& aCallback );
+        
+        /**
+         * (From MWlanMgmtInterface) Cancel the notification service.
+         */
+        virtual void CancelNotifications();
+
+        /**
+         * (From MWlanMgmtInterface) Perform a broadcast scan and return the detected WLAN networks.
+         *
+         * @param aResults Results of the scan.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetScanResults(
+            CWlanScanInfo& aResults );
+
+        /**
+         * (From MWlanMgmtInterface) Perform a broadcast scan and return the detected WLAN networks.
+         *
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aResults Results of the scan.
+         */
+        virtual void GetScanResults(
+            TRequestStatus& aStatus,
+            CWlanScanInfo& aResults );
+
+        /**
+         * (From MWlanMgmtInterface) Get the BSSID of the BSS currently connected to.
+         *
+         * @remark This method can only be used while successfully connected to
+         *         a WLAN network.
+         * @param aBssid BSSID of the currently connected BSS.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetConnectionBssid(
+            TWlanBssid& aBssid );
+
+        /**
+         * (From MWlanMgmtInterface) Get the SSID of the WLAN network currently connected to.
+         *
+         * @remark This method can only be used while successfully connected to
+         *         a WLAN network.
+         * @param aSsid SSID of the currently connected network.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetConnectionSsid(
+            TWlanSsid& aSsid );
+
+        /**
+         * (From MWlanMgmtInterface) Get the current Received Signal Strength Indicator (RSSI).
+         *
+         * @remark This method can only be used while successfully connected to
+         *         a WLAN network.
+         * @param aSignalQuality Current RSSI.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetConnectionSignalQuality(
+            TInt32& aSignalQuality );
+
+        /**
+         * (From MWlanMgmtInterface) Get the mode of the WLAN connection.
+         *
+         * @param aMode The current mode of the connection.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetConnectionMode(
+            TWlanConnectionMode& aMode );
+
+        /**
+         * (From MWlanMgmtInterface) Get the currently used security mode of the WLAN connection.
+         *
+         * @remark This method can only be used while successfully connected to
+         *         a WLAN network.
+         * @param aMode The security mode of the connection.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         * @deprecated This method is offered for backward compatibility reasons,
+         *             GetExtendedConnectionSecurityMode() should be used instead.
+         */
+        virtual TInt GetConnectionSecurityMode(
+            TWlanConnectionSecurityMode& aMode );
+
+        /**
+         * (From MWlanMgmtInterface) Get the available WLAN IAPs.
+         *
+         * @param aAvailableIaps Array of IAP IDs available.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetAvailableIaps(
+            RArray<TUint>& aAvailableIaps );
+ 
+        /**
+         * (From MWlanMgmtInterface) Get the available WLAN IAPs.
+         *
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.       
+         * @param aAvailableIaps Array of IAP IDs available.
+         */
+        virtual void GetAvailableIaps(
+            TRequestStatus& aStatus,
+            RArray<TUint>& aAvailableIaps );
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Get the available WLAN IAPs.
+         *
+         * @param aCacheLifetime Defines how many seconds old cached results the client
+         *                       is willing to accept. The valid is range is from 0 to
+         *                       60 seconds. The value of -1 means the system default will
+         *                       be used. The aCacheLifetime parameter has a meaning only
+         *                       when the aMaxDelay parameter is zero.
+         *                       Value will be changed to the actual value used by the
+         *                       system.
+         * @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.
+         *                  Value will be changed to the actual value used by the system.
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aAvailableIaps Array of IAP IDs available.
+         */
+         virtual void GetAvailableIaps(
+             TInt& aCacheLifetime,
+             TUint& aMaxDelay,
+             TRequestStatus& aStatus,
+             RArray<TUint>& aAvailableIaps );
+        
+        /**
+         * (From MWlanMgmtInterface) Notify the server about changed WLAN settings.
+         */
+        virtual void NotifyChangedSettings();
+        
+        /**
+         * (From MWlanMgmtInterface)
+         * Adds a bssid to the blacklist
+         *
+         * @param aBssid The BSSID of the accesspoint.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt AddBssidToBlacklist(
+            const TWlanBssid& aBssid );
+
+        /**
+         * Updates the RSS notification class boundaries.
+         *
+         * @param aRssLevelBoundary Specifies the RSS level when a signal level notification
+         *                          should be given. This boundary is used when signal level
+         *                          is getting worse (see next parameter).
+         * @param aHysteresis Specifies the difference between RSS notification trigger levels
+         *                    of declining and improving signal quality, i.e. since aRssLevelBoundary
+         *                    specifies the level boundary for declining signal, the same boundary
+         *                    for improving signal is ( aRssLevelBoundary - aHysteresis ).
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt UpdateRssNotificationBoundary( 
+            const TInt32 aRssLevelBoundary,
+            const TInt32 aHysteresis );
+
+        /**
+         * (From MWlanMgmtInterface) 
+         * Perform a direct scan for an SSID and return the detected WLAN networks.
+         * If the SSID has zero length, a broadcast scan will be done.
+         *
+         * @param aSsid name of the WLAN network
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aResults Results of the scan.
+         */
+        virtual void GetScanResults(
+            TWlanSsid& aSsid,
+            TRequestStatus& aStatus,
+            CWlanScanInfo& aResults );
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Perform a direct scan for an SSID and return the detected WLAN networks.
+         * If the SSID has zero length, a broadcast scan will be done.
+         *
+         * @param aCacheLifetime Defines how many seconds old cached results the client
+         *                       is willing to accept. The valid is range is from 0 to
+         *                       60 seconds. The value of -1 means the system default will
+         *                       be used. The aCacheLifetime parameter has a meaning only
+         *                       when the aMaxDelay parameter is zero.
+         *                       Value will be changed to the actual value used by the
+         *                       system.
+         * @param aMaxDelay Maximum amount of seconds the client is willing to wait for
+         *                  the scan results. The valid range is from 0 to 1200 seconds.
+         *                  Value will be changed to the actual value used by the system.
+         * @param aSsid Name of the WLAN network.
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aResults Results of the scan.
+         */
+         virtual void GetScanResults(
+             TInt& aCacheLifetime,
+             TUint& aMaxDelay,
+             TWlanSsid& aSsid,
+             TRequestStatus& aStatus,
+             CWlanScanInfo& aResults );
+        
+        /**
+         * (From MWlanMgmtInterface)
+         * Start Protected Setup.
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aId Service ID of network which user has selected to be configured.
+         * @param aCredentials Results of a successful Protected Setup operation.
+        */
+        virtual void RunProtectedSetup(
+            TRequestStatus& aStatus,
+            TUint32 aId,
+            CArrayFixSeg<TWlanProtectedSetupCredentialAttribute>& aCredentials );
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Cancel an outstanding Protected Setup operation.
+         */
+        virtual void CancelProtectedSetup();
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Cancel an outstanding scan request.
+         */
+        virtual void CancelGetScanResults();
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Cancel an outstanding IAP availability request.
+         */
+        virtual void CancelGetAvailableIaps();
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Add a list of SSIDs to the given IAP ID.
+         *
+         * The list of SSIDs is matched against the scan results during IAP availability
+         * check and the corresponding IAP marked as available if a match is found.
+         *
+         * @param aIapId IAP ID the list is attached to.
+         * @param aSsidList List of SSIDs. Any previous list attached will be overwritten.
+         * @return KErrNone if the list was successfully added, an error code otherwise.
+         */
+        virtual TInt AddIapSsidList(
+            TUint aIapId,
+            const CArrayFixFlat<TWlanSsid>& aSsidList );
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Remove any list of SSIDs attached to the given IAP ID.
+         *
+         * @param aIapId IAP ID the list is attached to.
+         * @return KErrNone if the list was successfully removed, an error code otherwise.
+         */
+        virtual TInt RemoveIapSsidList(
+            TUint aIapId );
+
+        /**
+         * (From MWlanMgmtInterface)
+         * Get the currently used security mode of the WLAN connection.
+         *
+         * @remark This method can only be used while successfully connected to
+         *         a WLAN network.
+         * @param aMode The security mode of the connection.
+         * @return KErrNone if successful, otherwise one of the system-wide
+         *         error codes.
+         */
+        virtual TInt GetExtendedConnectionSecurityMode(
+            TWlanConnectionExtentedSecurityMode& aMode );        
+
+        /**
+         * Activate the extended notification service.
+         * 
+         * After the client has enabled the notification service, it can
+         * receive asynchronous notifications from the server.
+         *
+         * @param aCallback The class that implements the callback interface.
+         * @param aCallbackInterfaceVersion The callback interface version implemented by
+         *                                  the client.
+         */
+        virtual void ActivateExtendedNotificationsL(
+            MWlanMgmtNotifications& aCallback,
+            TUint aCallbackInterfaceVersion );
+
+        /**
+         * Create a virtual traffic stream.
+         *
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aStreamParameters Traffic stream parameters to use.
+         * @param aStreamId Contains the ID assigned to this traffic stream
+         *                  on successful completion.
+         * @param aStreamStatus Contains the status of the traffic stream
+         *                  on successful completion.
+         */
+        virtual void CreateTrafficStream(
+            TRequestStatus& aStatus,
+            const TWlanTrafficStreamParameters& aStreamParameters,
+            TUint& aStreamId,
+            TWlanTrafficStreamStatus& aStreamStatus );
+
+        /**
+         * Cancel an outstanding traffic stream creation request.
+         */
+        virtual void CancelCreateTrafficStream();
+
+        /**
+         * Delete a virtual traffic stream.
+         *
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aStreamId ID of the traffic stream to delete.
+         */
+        virtual void DeleteTrafficStream(
+            TRequestStatus& aStatus,
+            TUint aStreamId );
+
+        /**
+         * Cancel an outstanding traffic stream deletion request.
+         */
+        virtual void CancelDeleteTrafficStream();
+
+        /**
+         * Initiate a roam to the given BSSID.
+         *
+         * @param aStatus Status of the calling active object. On successful
+         *                completion contains KErrNone, otherwise one of the
+         *                system-wide error codes.
+         * @param aBssid BSSID to roam to. If set to FF:FF:FF:FF:FF:FF address,
+         *               search for a better BSS is initiated.
+         */
+        virtual void DirectedRoam(
+            TRequestStatus& aStatus,
+            const TWlanBssid& aBssid );
+
+        /**
+         * Cancel an outstanding directed roam request.
+         */
+        virtual void CancelDirectedRoam();
+
+        /**
+         * Used to indicate completion of asynchronous Protected Setup request.
+         * @param aStatus Status of the request.
+         */
+        void ProtectedSetupComplete(
+            TInt aStatus );
+
+	protected: // Methods
+
+        /**
+         * (From MWLMNotify) Connection status has changed.
+         * 
+         * @aParam aNewState specifies the new state
+         */
+        virtual void ConnectionStateChanged(
+            TWlanConnectionState aNewState );
+    
+        /**
+         * (From MWLMNotify) BSSID has changed (i.e. AP handover)
+         * 
+         * @aParam aNewBSSID specifies the new BSSID (access point name).
+         */
+        virtual void BSSIDChanged(
+            TDesC8& aNewBSSID );
+
+        /**
+         * (From MWLMNotify) Connection has lost.
+         */
+        virtual void BSSLost();
+
+        /**
+         * (From MWLMNotify) Connection has regained.
+         */
+        virtual void BSSRegained();
+
+        /**
+         * (From MWLMNotify) New networks have been detected during scan.
+         */
+        virtual void NewNetworksDetected();
+
+        /**
+         * (From MWLMNotify) One or more networks have been lost since
+         * the last scan.
+         */
+        virtual void OldNetworksLost();
+
+        /**
+         * (From MWLMNotify) The used transmit power has been changed.
+         * 
+         * @param aPower The transmit power in mW.
+         */
+        virtual void TransmitPowerChanged(
+            TUint aPower );
+
+        /**
+         * (From MWLMNotify) Received signal strength has changed to another strength class.
+         *
+         * @param  specifies the rss class (normal/weak)
+         * @param aRcpValue specifies the actual rss value 
+         */
+        virtual void RcpChanged(
+            TWlanRCPLevel aRcpLevel,
+            TUint aRcpValue );
+
+        /**
+         * (From MWLMNotify) The status of a virtual traffic stream has changed.
+         *
+         * @param aStreamId ID of the traffic stream.
+         * @param aStreamStatus Status of the traffic stream.
+         */
+        virtual void TrafficStreamStatusChanged(
+            TUint aStreamId,
+            TWlanTrafficStreamStatus aStreamStatus );
+
+    private: // Methods
+
+        /**
+         * C++ default constructor.
+         */
+        CWlanMgmtImpl();
+
+        /**
+         * Symbian 2nd phase constructor.
+         */
+        void ConstructL();
+    
+    private:  // Data
+
+        // Interface to RWLMServer
+        RWLMServer iServer;
+
+        // Active Object for handling asynchronous scan requests
+        CWlanScanRequest* iScanRequest;
+       
+        // Status of the client active object for scan. Not owned by this class.
+        TRequestStatus* iPendingScanStatus;
+
+        // Active Object for handling asynchronous GetAvailableIaps requests
+        CWlanAvailableIapsRequest* iAvailableIapsRequest;
+		
+        // Status of the client active object for GetAvailableIaps(). Not owned by this class.
+        TRequestStatus* iPendingAvailableIapsStatus;
+
+		// Client notification callback. Not owned by this class.
+		MWlanMgmtNotifications* iClientNotification;
+
+        // Active Object for handling asynchronous Protected Setup requests
+        CProtectedSetupRequest* iProtectedSetupRequest;
+        
+        // Status of the client active object for Protected Setup. Not owned by this class.
+        TRequestStatus* iPendingProtectedSetupStatus;
+
+        // How old cached results (in seconds) the client is willing to accept. Not used
+        // in GetAvailableIaps and GetScanResults which have aCacheLifetime and aMaxDelay
+        // parameters.
+        TInt iCacheLifetime;
+
+		// Maximum time (in seconds) the client is willing to wait for the scan results. Not
+        // used in GetAvailableIaps and GetScanResults which have aCacheLifetime and aMaxDelay
+        // parameters.
+		TUint iMaxDelay;
+
+    };
+
+/**
+* Class for handling asynchronous scan requests.
+*/
+class CWlanScanRequest : public CActive 
+    {
+    public:  // Methods
+
+       // Constructors and destructor
+
+        /**
+         * C++ default constructor.
+         * @param aCallback Callback interface to CWlanMgmtImpl.
+         * @param aServer Interface to RWLMServer. 
+         * @param aScanInfo The scan results are stored here.
+         * @param aSsid name of the network
+         * @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.
+         */
+        CWlanScanRequest( 
+            CWlanMgmtImpl& aCallback, 
+            RWLMServer& aServer, 
+            CWlanScanInfoImpl& aScanInfo,
+            const TWlanSsid& aSsid,
+            TInt& aCacheLifetime,
+            TUint& aMaxDelay );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CWlanScanRequest();
+        
+       // New methods
+
+        /**
+         * Issues a new request and indicates the active scheduler
+         * of an outstanding request.
+         */
+        void IssueRequest();
+
+    protected:  // Methods
+
+       // Methods from base classes
+
+        /**
+         * (From CActive) Called when the request has been completed.
+         */       
+        virtual void RunL();
+
+        /**
+         * (From CActive) Called by the framework if RunL leaves.
+         * @param aError The error code RunL leaved with.
+         * @return One of the system-wide error codes.
+         */
+        virtual TInt RunError(
+            TInt aError );
+
+        /**
+         * (From CActive) Called by the framework as part of AO's Cancel().
+         */
+        virtual void DoCancel();
+
+    private:   // Data
+
+        // Callback interface to CWlanMgmtImpl
+        CWlanMgmtImpl& iCallback;
+
+        // Interface to RWLMServer
+        RWLMServer& iServer;
+
+        // Handle to the scan list.
+        CWlanScanInfoImpl& iScanInfo;
+
+        // SSID to scan for.
+        TWlanSsid iSsid;
+
+        // How old cached results (in seconds) the client is willing to accept
+        TInt& iCacheLifetime;
+		
+        // Maximum time (in seconds) the client is willing to wait for the scan results.
+        TUint& iMaxDelay;
+
+    };
+
+/**
+* Class for handling asynchronous GetAvailableIaps() requests.
+*/
+class CWlanAvailableIapsRequest : public CActive 
+    {
+    public:  // Methods
+
+       // Constructors and destructor
+
+        /**
+         * C++ default constructor.
+         * @param aCallback Callback interface to CWlanMgmtImpl.
+         * @param aServer Interface to RWLMServer. 
+         * @param aAvailableIaps Available IAPs are stored here.
+         * @param aCacheLifetime how old cached results (in seconds) the client is willing to accept.
+         * @param aMaxDelay maximum time the client is willing to wait for the scan results.
+         */
+        CWlanAvailableIapsRequest(
+            CWlanMgmtImpl& aCallback,
+            RWLMServer& aServer,
+            RArray<TUint>& aAvailableIaps,
+            TInt& aCacheLifetime,
+            TUint& aMaxDelay );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CWlanAvailableIapsRequest();
+        
+       // New methods
+
+        /**
+         * Issues a new request and indicates the active scheduler
+         * of an outstanding request.
+         */
+        void IssueRequest();
+
+    protected:  // Methods
+
+       // Methods from base classes
+
+        /**
+         * (From CActive) Called when the request has been completed.
+         */       
+        virtual void RunL();
+
+        /**
+         * (From CActive) Called by the framework if RunL leaves.
+         * @param aError The error code RunL leaved with.
+         * @return One of the system-wide error codes.
+         */
+        virtual TInt RunError(
+            TInt aError );
+
+        /**
+         * (From CActive) Called by the framework as part of AO's Cancel().
+         */
+        virtual void DoCancel();
+
+    private:   // Data
+
+        // Callback interface to CWlanMgmtImpl
+        CWlanMgmtImpl& iCallback;
+
+        // Interface to RWLMServer
+        RWLMServer& iServer;
+
+        // Handle to client storage for available IAPs
+		RArray<TUint>& iPendingAvailableIaps;
+		
+		// Storage for available IAPs
+		TWlmAvailableIaps iAvailableIaps;
+		
+		// The package buffer needed for the asynchronous request
+		TPckg<TWlmAvailableIaps> iAvailableIapsBuf;
+		
+		// The package buffer needed for the asynchronous request
+		TPckg<TInt> iCacheLifetimeBuf;
+		
+		// The package buffer needed for the asynchronous request
+		TPckg<TUint> iMaxDelayBuf;
+		
+    };
+
+
+/**
+* Class for handling asynchronous Protected Setup requests.
+*/
+class CProtectedSetupRequest : public CActive 
+    {
+    public:  // Methods
+
+       // Constructors and destructor
+
+        /**
+         * C++ default constructor.
+         * @param aCallback Callback interface to CWlanMgmtImpl.
+         * @param aServer Interface to RWLMServer. 
+         * @param aId Service ID of network which user has selected to be configured.
+         * @param aCredentials Results of a successful Protected Setup operation.
+         */
+        CProtectedSetupRequest(
+            CWlanMgmtImpl& aCallback,
+            RWLMServer& aServer,
+            TUint32 aId,
+            CArrayFixSeg<TWlanProtectedSetupCredentialAttribute>& aCredentials );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CProtectedSetupRequest();
+        
+       // New methods
+
+        /**
+         * Issues a new request and indicates the active scheduler
+         * of an outstanding request.
+         */
+        void IssueRequest();
+
+    protected:  // Methods
+
+       // Methods from base classes
+
+        /**
+         * (From CActive) Called when the request has been completed.
+         */       
+        virtual void RunL();
+
+        /**
+         * (From CActive) Called by the framework if RunL leaves.
+         * @param aError The error code RunL leaved with.
+         * @return One of the system-wide error codes.
+         */
+        virtual TInt RunError(
+            TInt aError );
+
+        /**
+         * (From CActive) Called by the framework as part of AO's Cancel().
+         */
+        virtual void DoCancel();
+
+    private:   // Data
+
+        // Callback interface to CWlanMgmtImpl
+        CWlanMgmtImpl& iCallback;
+
+        // Interface to RWLMServer
+        RWLMServer& iServer;
+
+        // Service ID of network which user has selected to be configured.
+        TUint32 iServiceId;
+
+        // Results of a successful Protected Setup operation.
+        CArrayFixSeg<TWlanProtectedSetupCredentialAttribute>& iCredentials;
+
+		// Storage for received credentials.
+		TWlmProtectedSetupCredentials iCredentialsStorage;
+
+        // The package buffer needed for the asynchronous request.
+        TPckg<TWlmProtectedSetupCredentials> iCredentialsBuf;
+    };
+
+#endif // WLANMGMTIMPL_H