wlanutilities/wlansniffer/wlansnifferkeepalive/inc/wsfkeepalive.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:18:40 +0300
branchRCL_3
changeset 24 63be7eb3fc78
permissions -rw-r--r--
Revision: 201029 Kit: 201035

/*
* Copyright (c) 2010 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:
* Main implementation of Wlan Sniffer Keepalive application.
*/

#ifndef WSFKEEPALIVE_H
#define WSFKEEPALIVE_H

// System includes
 
// User includes

#include "wsfkeepalivetimer.h"
 
// Forward declarations

class CWsfKeepaliveCmm;
class CWsfKeepaliveConnMon;
class CWsfKeepaliveConnMonDisc;
class CWsfKeepaliveEsock;
 
// External data types

// Global function prototypes
 
// Constants

// Class declaration

/**
 *  Main implementation of Wlan Sniffer Keepalive application.
 *  
 *  This class contains the actual application logic, which monitors
 *  Wlan connections and keeps them alive, if needed.
 */
class CWsfKeepalive : public CBase, public MWsfKeepaliveTimerNotify
    {
    // Friend classes:
    friend class CWsfKeepaliveTestSuite;

public:
    
    // Data types

    // Constants
    
    /** Invalid/not available connection ID */
    static const TUint KInvalidConnectionId = 0;

    /** Constructors */
    
    /**
     * Two-phased constructor.
     * 
     * @return New object allocated from heap
     */
    static CWsfKeepalive* NewL();
    
    /**> Destructor */
    virtual ~CWsfKeepalive();

public:
    
    /**
     * Timer expiration handler. Disconnects the monitored connection,
     * if needed. Restarts timer, if needed.
     *
     * @param aError Status of the timer event
     */
    void TimerExpired( TInt aError );

    /**
     * Wlan connection event handler. Shares and starts to monitor the
     * opened connection, if necessary.
     *
     * @param aConnectionId ID of the opened connection
     * @param aIapId IAP ID of the opened connection
     */
    void WlanConnectionOpenedL( TUint aConnectionId, TUint aIapId );
    
    /**
     * Wlan connection event handler. Stops monitoring the connection.
     */
    void WlanConnectionClosed();

protected:
    
private:
    
    CWsfKeepalive();

    void ConstructL();
    
    TBool OpenedByWlanSniffer( TUint aConnectionId );
    
    TBool NoRealClients( TUint aConnectionId );
    
    void SetState( TUint aState );
        
private: // Data

    // Constants

    /**
     * State values for the keepalive implementation
     */
    enum
        {
        /** Not monitoring any connection */
        EInactive,
        /** Monitoring connection, which has no real clients */
        EActiveNoClients,
        /** Monitoring connection, which has one or more real clients */
        EActiveWithClients
        };
    
    /**
     * Timer for polling users of a connection
     */
    CWsfKeepaliveTimer* iTimer;

    /**
     * Connection Method Manager class reference
     */
    CWsfKeepaliveCmm* iCmMgr;
    
    /**
     * Connection Monitor class reference
     */
    CWsfKeepaliveConnMon* iConnMon;

    /**
     * Connection Disconnector class reference
     */
    CWsfKeepaliveConnMonDisc* iConnMonDisc;
    
    /**
     * RConnection handler class reference
     */
    CWsfKeepaliveEsock* iEsock;
    
    /**
     * Time when keepalive started for monitored connection
     */
    TTime iKeepaliveStart;
    
    /**
     * ID of monitored connection, KInvalidConnectionId if not valid
     */
    TUint iConnectionId;

    /**
     * State of the keepalive implementation
     */
    TUint iState;
    
    /**
     * IapId of the connection
     */
    TUint iIapId;
    };

#endif // WSFKEEPALIVE_H