diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtimpl.h --- /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& 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& 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& 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& 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& 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& 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& iPendingAvailableIaps; + + // Storage for available IAPs + TWlmAvailableIaps iAvailableIaps; + + // The package buffer needed for the asynchronous request + TPckg iAvailableIapsBuf; + + // The package buffer needed for the asynchronous request + TPckg iCacheLifetimeBuf; + + // The package buffer needed for the asynchronous request + TPckg 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& 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& iCredentials; + + // Storage for received credentials. + TWlmProtectedSetupCredentials iCredentialsStorage; + + // The package buffer needed for the asynchronous request. + TPckg iCredentialsBuf; + }; + +#endif // WLANMGMTIMPL_H