diff -r 63be7eb3fc78 -r f28ada11abbf wlanutilities/wlansniffer/engine/server/inc/wsfwlanbearerconnectionmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlansniffer/engine/server/inc/wsfwlanbearerconnectionmonitor.h Wed Sep 01 12:20:32 2010 +0100 @@ -0,0 +1,419 @@ +/* +* Copyright (c) 2007-2008 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: Class header for CWsfWlanBearerConnectionMonitor +* +*/ + + + +#ifndef C_WSFWLANBEARERCONNECTIONMONITOR_H +#define C_WSFWLANBEARERCONNECTIONMONITOR_H + + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include + +// INTERNAL INCLUDES +#include "wsfwlaninfo.h" +#include "wsfwlanconnectiondetailsprovider.h" + + +// FORWARD DECLARATIONS +class MWsfWlanMonitorObserver; +class MWsfServerCloserAdapter; +class CWsfIct; + + +// CLASS DEFINITION +/** + * Class to monitor and control all WLAN bearer related events and actions + * + * @since S60 5.0 + * @lib wsfserver.exe + */ +NONSHARABLE_CLASS( CWsfWlanBearerConnectionMonitor ): public CActive, + public MConnectionMonitorObserver, + public MWsfWlanConnectionDetailsProvider + { + private: + /** + * Connecting states when creating an owned connection + */ + enum TWsfConnectingState + { + /** + * Not connected, neither requested + */ + ECsIdle, + + /** + * Requested to connect + */ + ECsNotConnected, + + /** + * Socket server and connection handler opened + */ + ECsSocketOpened, + + /** + * Connection has been established + */ + ECsConnectionCreated, + + /** + * Connection environment fully initialized + */ + ECsConnected + }; + + + public: // Constructors and destructor + /** + * Factory function. + * @since S60 5.0 + * @param aServerCloser Reference to the server closer object. + * Ownership not passed. + * @return Class instance + */ + static CWsfWlanBearerConnectionMonitor* NewL( + MWsfServerCloserAdapter& aServerCloser ); + + /** + * Factory function. + * @since S60 5.0 + * @param aServerCloser Reference to the server closer object. + * Ownership not passed. + * @return Class instance + */ + static CWsfWlanBearerConnectionMonitor* NewLC( + MWsfServerCloserAdapter& aServerCloser ); + + /** + * Destructor. + */ + ~CWsfWlanBearerConnectionMonitor(); + + private: // Constructors + /** + * Constructor + * @since S60 5.0 + * @param aServerCloser Reference to the server closer object. + * Ownership not passed. + */ + CWsfWlanBearerConnectionMonitor( + MWsfServerCloserAdapter& aServerCloser ); + + /** + * Second-phase constructor. + * @since S60 5.0 + */ + void ConstructL(); + + public: // New methods + + /** + * Returns the name of the active wlan connection + * @since S60 5.0 + * @return Connection name or KNullDesC if not connected + */ + const TDesC& GetWlanBearerNameL(); + + /* + * Starts monitoring WLAN events through the given observer + * @since S60 5.0 + * @param aObserver The object to use for monitoring. Ownership + * not passed. + */ + void StartMonitoringL( MWsfWlanMonitorObserver* aObserver ); + + /* + * Stops monitoring WLAN events + * @since S60 5.0 + */ + void StopMonitoring(); + + /* + * Connects to the given IAP + * @since S60 5.0 + * @param aIapId WLAN IAP id to connect to. + * @param aConnectOnly ETrue if Connect selected + * @param aTestAccessPoint ETrue if accesspoint needs testing + * @return KErrNone on success, error code otherwise + */ + TInt ConnectBearer( TUint32 aIapId, + TBool aConnectOnly, + TBool aTestAccessPoint ); + + /* + * Disconnects active connection + * @since S60 5.0 + * @return ETrue if the was something to disconnect otherwise EFalse + */ + TBool DisconnectBearer(); + + /** + * Starts to monitor Access Point + * @since S60 5.0 + * @param aIapId Access point to be monitored + */ + void MonitorAccessPoint( TUint32 aIapId ); + + /** + * Queries if there is an active WLAN connection. + * @since S60 5.0 + * @return ETrue if there is an active WLAN connection, + * EFalse otherwise. + */ + TBool IsConnected(); + + /** + * Aborts the currently ongoing connecting process + * @since S60 5.0 + * @return KErrNone on success, error code otherwise + */ + TInt AbortConnecting(); + + /** + * Controls the auto-disconnect timer in the server + * for owned connections + * @since S60 5.0 + * @param aAdcCommand Command for the timer, + * see TWsfAutoDisconnectCommand + * @return ETrue if the timer has been started (also if it had been + * started earlier), EFalse if the timer couldn't be started + * (e.g. because there is no owned connection). + */ + TBool ControlDisconnectTimer( TUint aAdcCommand ); + + + private: // From CActive + /** + * Implements cancellation of an outstanding request. + * @since S60 5.0 + */ + void DoCancel(); + + /** + * Handles an active object's request completion event. + * @since S60 5.0 + */ + void RunL(); + + /** + * Handles a leave occurring in RunL(). + * @since S60 5.0 + * @param aError Leave code + * @return aError + */ + TInt RunError( TInt aError ); + + + protected: // From MConnectionMonitorObserver + + /** + * Event method is called every time an event occures. + * @since S60 5.0 + * @param aConnMonEvent The event information. + */ + void EventL( const CConnMonEventBase& aConnMonEvent ); + + + public: // from MWsfWlanConnectionDetailsProvider + + /** + * Fills TWsfWlanInfo with the connected wlan's properties + * @since S60 5.0 + * @param aWlanInfo The wlaninfo structure to be filled + * @return ETrue if there is a connection and returned data is valid, + * EFalse otherwise + */ + TBool ConnectedWlanConnectionDetailsL( TWsfWlanInfo* aWlanInfo ); + + + private: // New methods + + /** + * Loops through the list of current connections and searches for one + * with wlan bearer + * @since S60 5.0 + */ + void FindWlanBearerConnectedL(); + + /** + * Checks connection details and retrieves WLAN connection name + * @since S60 5.0 + * @param aConnectionId The connection in question + * @return ETrue on success (WLAN connection was found), + * EFalse otherwise + */ + TBool CheckConnectionDetailsL( TUint aConnectionId ); + + /** + * Shuts down the owned connection + * @since S60 5.0 + */ + void ShutdownOwnedConnectionL(); + + /** + * Cleanup function to release the shutdown mutex if shutdown leaves + * @since S60 5.0 + * @param aPtr Pointer for this class + */ + static void ReleaseShutdownMutex( TAny* aPtr ); + + /** + * Callback for CPeriodic to check the client count and + * start inactivity timer if needed. + * @since S60 5.0 + * @param aPtr Pointer for this class + * @return KErrNone if successful, system-wide error code otherwise. + */ + static TInt CheckClientCount( TAny* aPtr ); + + /** + * Function that does actual processing in checking the client count. + * Called by CheckClientCount(). + * @since S60 5.0 + */ + void CheckClientCountL(); + + + private: // Data + + /** + * Reference to the observer of this class (not owned) + */ + MWsfWlanMonitorObserver* iObserver; + + /** + * Handle to the connection monitor + */ + RConnectionMonitor iMonitor; + + /** + * Name of the currently active WLAN connection + */ + TBuf iWlanNetworkName; + + /** + * Id of the currently active WLAN connection + */ + TInt iConnectionId; + + /** + * Indicates whether connection monitoring is on + */ + TBool iMonitoring; + + /** + * The access point to be monitored + */ + TUint32 iMonitoredAp; + + /** + * Handle to the socket server for making a connection + */ + RSocketServ iSocketServ; + + /** + * Handle to the owned connection + */ + RConnection iConnection; + + /** + * Indicates whether the connection was initiated from within Sniffer + */ + TBool iConnectionOwned; + + /** + * Default connection settings before creating an own connection + */ + TCmDefConnValue iOriginalDefConn; + + /** + * Default connection settings after the owned connection has been + * established + */ + TCmDefConnValue iCurrentDefConn; + + /** + * Periodic polling for connection client count + */ + CPeriodic* iClientPoll; + + /** + * Indicates whether timer-based auto-disconnect is enabled + */ + TBool iAutoDisconnect; + + /** + * Count of clients using the connection + */ + TInt iClientCount; + + /** + * Timer to measure time elapsed without activity + */ + TTime iInactivityStart; + + /** + * Status of currently ongoing connecting process + */ + TWsfConnectingState iConnectingState; + + /** + * IAP id to connect to. Used by the connecting active object. + */ + TUint32 iConnIap; + + /** + * Indicates whether the connection is being aborted + */ + TBool iAborting; + + /** + * Asserts that the shutdown process is not reentered + */ + TBool iShutdownMutex; + + /** + * Asserts that the client counting process is not reentered + */ + TBool iClientCountMutex; + + /** + * Handle to the CmManager + */ + RCmManagerExt iCmMgr; + + /** + * Reference to the server closer (not owned) + */ + MWsfServerCloserAdapter& iServerCloser; + + /** + * Reference to ICT handler + */ + CWsfIct* iIct; + + }; + + +#endif // C_WSFWLANBEARERCONNECTIONMONITOR_H +