bluetoothengine/btnotif/btnotifsrv/inc/btnotifconnectiontracker.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:23:52 +0300
changeset 40 997690c3397a
parent 33 837dcc42fd6a
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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: Bluetooth connection tracker and manager.
*
*/

#ifndef BTNOTIFCONNECTIONTRACKER_H
#define BTNOTIFCONNECTIONTRACKER_H


#include <e32property.h>
#include <btmanclient.h>
#include <bluetooth/pairing.h>
#include "btnotifserver.h"

class CBTNotificationManager;
class CbtnotifConnectionTrackerTest;
class CBTNotifSecurityManager;



/**
 *  CBTNotifConnectionTracker keeps track of remote device connections
 *  
 *  @since Symbian^4
 */
NONSHARABLE_CLASS( CBTNotifConnectionTracker ) : public CBase
    {

public:

    /**
     * Two-phased constructor.
     * @param aServer Pointer to our parent
     */
    static CBTNotifConnectionTracker* NewL( CBTNotifServer* aServer );

    /**
     * Destructor.
     */
    virtual ~CBTNotifConnectionTracker();

    /**
     * Get a pointer to the btnotif server object.
     *
     * @since Symbian^4
     * @return The server.
     */
    inline CBTNotifServer* Server() const
        { return iServer; }

    /**
     * Get a pointer to the notification manager.
     * This handle can be used for queueing notifications.
     *
     * @since Symbian^4
     * @return The notification manager.
     */
    inline CBTNotificationManager* NotificationManager() const
        { return iServer->NotificationManager(); }

    /**
     * Get the shared handle to BT registry server.
     * This handle can be used for creating subsessions.
     *
     * @since Symbian^4
     * @return Session with BT registry server.
     */
    inline RBTRegServ& RegistryServerSession()
        { return iBTRegistrySession; }

    /**
     * Get the handle to the socket server.
     * This handle can be used for creating subsessions.
     *
     * @since Symbian^4
     * @return Session with the socket server.
     */
    inline RSocketServ& SocketServerSession()
        { return iSockServ; }
  
    /**
     * Processes a message for notifiers related to remote devices.
     * ( These are usually issued by BT stack. However, any application
     * is not restricted to do so (e.g., for testing purpose).
     *
     * @since Symbian^4
     * @param aMessage The message containing the details of the client request.
     */
    void HandleNotifierRequestL( const RMessage2& aMessage );
    
    /**
     * Handle a request related to pairing.
     *
     * @since Symbian^4
     * @param aMessage The message containing the details of the client request.
     */
    void HandleBondingRequestL( const RMessage2& aMessage );

    /**
     * Check repeated connection attempts, and record rejected/accepted queries.
     *
     * @since Symbian^4
     * @param aDevice The details of the remote device for this query.
     * @param aAccepted ETrue if the user accepted the request, EFalse if rejected.
     * @return ETrue if the user should be queried for blocking this device,
     *         EFalse if no query should be launched by the caller.
     */
    TBool UpdateBlockingHistoryL( const CBTDevice* aDevice, TBool aAccepted );

private:

    CBTNotifConnectionTracker( CBTNotifServer* aServer );

    void ConstructL();

    /**
     * Record and check the time between connection attempts.
     *
     * @since Symbian^4
     * @param aAccepted ETrue if the user accepted the request, EFalse if rejected.
     * @return EFalse if the attempt followed the previous attempt too fast,
     *         otherwise ETrue.
     */
    TBool RecordConnectionAttempts( TBool aAccepted );

private: // data

    /**
     * Time of the last denied connection attempt.
     */
    TInt64 iLastReject;

    /**
     * Array of device addresses that the user has denied access.
     */
    RArray<TBTDevAddr> iDeniedRequests;

    /**
     * Single session with BTRegistry, to be used for subsessions.
     */
    RBTRegServ iBTRegistrySession;

    /**
     * Single session with the socket server, to be used for subsessions.
     */
    RSocketServ iSockServ;

    /**
     * Reference to our parent the server class.
     * Not own.
     */
    CBTNotifServer* iServer;
    
    /**
     * Object for managing the application pairing.
     * Own.
     */
    CBTNotifSecurityManager* iPairingManager;

    BTUNITTESTHOOK

    };

#endif // BTNOTIFCONNECTIONTRACKER_H