bluetoothengine/btnotif/btnotifsrv/inc/btnotifconnectiontracker.h
author hgs
Mon, 12 Jul 2010 18:51:05 +0300
changeset 42 b72428996822
parent 31 a0ea99b6fa53
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     1
/*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     3
* All rights reserved.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     4
* This component and the accompanying materials are made available
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     6
* which accompanies this distribution, and is available
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     8
*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     9
* Initial Contributors:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    10
* Nokia Corporation - initial contribution.
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    11
*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    12
* Contributors:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    13
*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    14
* Description: Bluetooth connection tracker and manager.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    15
*
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    16
*/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    17
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    18
#ifndef BTNOTIFCONNECTIONTRACKER_H
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    19
#define BTNOTIFCONNECTIONTRACKER_H
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    20
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    21
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    22
#include <e32property.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    23
#include <btmanclient.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    24
#include <bluetooth/pairing.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
#include "btnotifserver.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
class CBTNotificationManager;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
class CbtnotifConnectionTrackerTest;
42
hgs
parents: 31
diff changeset
    29
class CBTNotifSecurityManager;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    30
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
/**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
 *  CBTNotifConnectionTracker keeps track of remote device connections
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
 *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
 *  @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
 */
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    38
NONSHARABLE_CLASS( CBTNotifConnectionTracker ) : public CBase
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
public:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
     * Two-phased constructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
     * @param aServer Pointer to our parent
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
    static CBTNotifConnectionTracker* NewL( CBTNotifServer* aServer );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
     * Destructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
    virtual ~CBTNotifConnectionTracker();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
     * Get a pointer to the btnotif server object.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
     * @return The server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
    inline CBTNotifServer* Server() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
        { return iServer; }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
     * Get a pointer to the notification manager.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
     * This handle can be used for queueing notifications.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
     * @return The notification manager.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
    inline CBTNotificationManager* NotificationManager() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
        { return iServer->NotificationManager(); }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
     * Get the shared handle to BT registry server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
     * This handle can be used for creating subsessions.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
     * @return Session with BT registry server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
    inline RBTRegServ& RegistryServerSession()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
        { return iBTRegistrySession; }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
     * Get the handle to the socket server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
     * This handle can be used for creating subsessions.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
     * @return Session with the socket server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
    inline RSocketServ& SocketServerSession()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
        { return iSockServ; }
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    92
  
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
    /**
42
hgs
parents: 31
diff changeset
    94
     * Processes a message for notifiers related to remote devices.
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    95
     * ( These are usually issued by BT stack. However, any application
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    96
     * is not restricted to do so (e.g., for testing purpose).
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    97
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    98
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    99
     * @param aMessage The message containing the details of the client request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
     */
42
hgs
parents: 31
diff changeset
   101
    void HandleNotifierRequestL( const RMessage2& aMessage );
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   102
    
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   103
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   104
     * Handle a request related to pairing.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   105
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   106
     * @since Symbian^4
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   107
     * @param aMessage The message containing the details of the client request.
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   108
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   109
    void HandleBondingRequestL( const RMessage2& aMessage );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   110
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   111
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   112
     * Check repeated connection attempts, and record rejected/accepted queries.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   113
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   114
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   115
     * @param aDevice The details of the remote device for this query.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   116
     * @param aAccepted ETrue if the user accepted the request, EFalse if rejected.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   117
     * @return ETrue if the user should be queried for blocking this device,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   118
     *         EFalse if no query should be launched by the caller.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   119
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   120
    TBool UpdateBlockingHistoryL( const CBTDevice* aDevice, TBool aAccepted );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   121
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   122
private:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   123
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   124
    CBTNotifConnectionTracker( CBTNotifServer* aServer );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   125
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   126
    void ConstructL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   127
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   128
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   129
     * Record and check the time between connection attempts.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   130
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   131
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   132
     * @param aAccepted ETrue if the user accepted the request, EFalse if rejected.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   133
     * @return EFalse if the attempt followed the previous attempt too fast,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   134
     *         otherwise ETrue.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   135
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   136
    TBool RecordConnectionAttempts( TBool aAccepted );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   137
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   138
private: // data
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   139
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   140
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   141
     * Time of the last denied connection attempt.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   142
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   143
    TInt64 iLastReject;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   144
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   145
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   146
     * Array of device addresses that the user has denied access.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   147
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   148
    RArray<TBTDevAddr> iDeniedRequests;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   150
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   151
     * Single session with BTRegistry, to be used for subsessions.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   153
    RBTRegServ iBTRegistrySession;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   154
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   155
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   156
     * Single session with the socket server, to be used for subsessions.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   157
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   158
    RSocketServ iSockServ;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   159
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   160
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   161
     * Reference to our parent the server class.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   162
     * Not own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   163
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   164
    CBTNotifServer* iServer;
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   165
    
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   166
    /**
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   167
     * Object for managing the application pairing.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   168
     * Own.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   169
     */
42
hgs
parents: 31
diff changeset
   170
    CBTNotifSecurityManager* iPairingManager;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   171
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   172
    BTUNITTESTHOOK
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   173
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   174
    };
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   175
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   176
#endif // BTNOTIFCONNECTIONTRACKER_H