wlanutilities/wlansniffer/engine/server/inc/wsfwlanbearerconnectionmonitor.h
branchRCL_3
changeset 25 f28ada11abbf
--- /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 <e32base.h>
+#include <rconnmon.h>
+#include <es_sock.h>
+#include <cmdefconnvalues.h>
+#include <cmmanagerext.h>
+
+//  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<KWlanMaxAccessPointNameLength> 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
+