bluetoothengine/btnotif/btnotifsrv/inc/btnotifpairinghelper.h
author hgs
Mon, 03 May 2010 14:36:07 +0300
changeset 29 48ae3789ce00
permissions -rw-r--r--
201017_2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     1
/*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     2
* ============================================================================
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     3
*  Name        : btnotifpairinghelper.h
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     4
*  Part of     : bluetoothengine / btnotif
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     5
*  Description : Helper class for processing pairing requests and results, as extended functionality for CBTNotifConnection.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     6
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     7
*  Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies).
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     8
*  All rights reserved.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     9
*  This component and the accompanying materials are made available
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    10
*  under the terms of "Eclipse Public License v1.0"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    11
*  which accompanies this distribution, and is available
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    12
*  at the URL "http://www.eclipse.org/legal/epl-v10.html".
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    13
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    14
*  Initial Contributors:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    15
*  Nokia Corporation - initial contribution.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    16
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    17
*  Contributors:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    18
*  Nokia Corporation
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    19
* ============================================================================
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    20
* Template version: 4.2
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    21
*/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    22
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    23
#ifndef BTNOTIFPAIRINGHELPER_H
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    24
#define BTNOTIFPAIRINGHELPER_H
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
#include <e32base.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
#include <btmanclient.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
#include <bluetooth/pairing.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    29
#include <btservices/btsimpleactive.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    30
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
#include "bluetoothnotification.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
#include "bluetoothtrace.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
class CBTNotifConnection;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
class CBTNotifConnectionTracker;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
class CBTDevice;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
/**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
 *  Helper class for performing pairing-related operations.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
 *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
 *  This class is constructed only when there is a pairing-related event,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
 *  and destructed after completion. Pairing-related events are bonding
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
 *  (outgoing bonding request from an application), pairing notifiers
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
 *  (PIN input i.e. legacy pairing, numeric comparison and passkey display),
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
 *  and Just Works pairing completion.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
 *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
 *  The structure of operations is as follows: each event is initiated through
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
 *  StartXxL() operation, and finished with CompleteXxL(), there is also a
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
 *  CancelXxL() operation where needed. In addition there are the base class virtual
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
 *  functions, a few helper functions and HandleAuthenticationCompleteL, which
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
 *  processes a baseband authentication result. The same structure applies to
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
 *  suboperations, such as StartTrustedQueryL and CompleteTrustedQueryL.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
 *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
 *  For bonding, there is StartBondingL, CompleteBondingL() CancelBondingL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
 *  for pairing notifiers there is StartPairingNotifierL(),
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
 *  CancelPairingNotifierL(), CompletePairingNotifierL() and also
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
 *  UpdatePairingNotifierL(). For Just Works processing, there is
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
 *  StartJustWorksProcessingL(), CancelJustWorksProcessingL() and
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
 *  CompleteJustWorksProcessingL().
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
 *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
 *  The design of this class is focussed on structure and maintainability first.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
 *  Duplicate (state) information is kept to a minimum. And memory usage comes
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
 *  before processing. Pairing is an infrequent operation, and this class is
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
 *  only instantiated when there is pairing-related processing, so extreme
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
 *  focus on memory or processing efficiency would have relatively little effect.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
 *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
 *  @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
NONSHARABLE_CLASS( CBTNotifPairingHelper ) : public CBase,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
                                             public MBTNotificationResult,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
                                             public MBtSimpleActiveObserver
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
public:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
    /**  Enumeration identifying the stage of the pairing operation. */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
    enum TPairingOp
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
        EIdle,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
        EAcceptPairing,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
        ELegacyPairing,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
        ESspPairing,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
        EJustWorksPairing,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
        EAutoPairing,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
        EPostPairingOperations, // Marks the queries and notes which follow
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
                                // the real pairing input from the user.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
        EDedicatedBonding,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
        EUnpairing,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
        EAwaitingPairingResult,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
        EShowPairingSuccess,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
        EShowPairingFailure,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
        EQueryTrust,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    94
        EBlocking,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
        EPairingCancelled
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    96
        };
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    97
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    98
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    99
     * Two-phased constructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
     * @param aConnection Pointer to the parent.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   101
     * @param aDevice Pointer to information of the remote device.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   102
     * aParam aTracker Pointer to the connection tracker.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   103
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   104
    static CBTNotifPairingHelper* NewL( CBTNotifConnection* aConnection, 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   105
                CBTNotifConnectionTracker* aTracker );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   106
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   107
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   108
    * Destructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   109
    */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   110
    virtual ~CBTNotifPairingHelper();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   111
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   112
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   113
     * Get the address of the remote device for this connection.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   114
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   115
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   116
     * @param aProfile The profile identifying the service.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   117
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   118
    inline CBTNotifPairingHelper::TPairingOp CurrentOperation() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   119
        { return iOperation; }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   120
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   121
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   122
     * The baseband authentication has completed, handle the result.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   123
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   124
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   125
     * @param aError The result of the authentication procedure.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   126
     */    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   127
    void HandleAuthenticationCompleteL( TInt aError );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   128
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   129
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   130
     * Start a bonding operation with the remote device.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   131
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   132
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   133
     * @param aMessage The handle of the message from the client.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   134
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   135
    void StartBondingL( TInt aHandle );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   136
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   137
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   138
     * Cancel an ongoing bonding operation with the remote device.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   139
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   140
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   141
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   142
    void CancelBondingL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   143
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   144
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   145
     * Handle a notifier request for pairing with the remote device
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   146
     * of this connection.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   147
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   148
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
     * @param aUid The UID of the notifier for this pairing request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   150
     * @param aParams The parameters for this request from the client.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   151
     */    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
    void StartPairingNotifierL( TInt aUid, const TDesC8& aParams );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   153
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   154
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   155
     * Update an outstanding request for this connection.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   156
     *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   157
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   158
     * @param aUid The UID of the notifier for this update.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   159
     * @param aParams The updated parameters for this request from the client.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   160
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   161
    void UpdatePairingNotifierL( TInt aUid, const TDesC8& aParams );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   162
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   163
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   164
     * Cancel an outstanding request for this connection.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   165
     *  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   166
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   167
     * @param aUid The UID of the notifier for this pairing request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   168
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   169
    void CancelPairingNotifierL( TInt aUid );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   170
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   171
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   172
     * Start the processing of a completed Just Works pairing.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   173
     * This needs special attention, as this class is not notified
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   174
     * other than by observing the registry, and the user is not
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   175
     * notified otherwise either (which is the point of this association
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   176
     * model). It needs to be verified that the pairing is related to
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   177
     * a service access, as dedicated bonding should not be possible
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   178
     * (for devices that do not have any IO capabilities).
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   179
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   180
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   181
     * @param aMessage The handle of the message from the client.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   182
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   183
    void StartJustWorksProcessingL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   184
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   185
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   186
     * Cancel the processing of a completed Just Works pairing.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   187
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   188
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   189
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   190
    void CancelJustWorksProcessingL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   191
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   192
// from base class MBTNotificationResult
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   193
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   194
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   195
     * From MBTNotificationResult.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   196
     * Handle an intermediate result from a user query.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   197
     * This function is called if the user query passes information
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   198
     * back before it has finished i.e. is dismissed. The final acceptance/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   199
     * denial of a query is passed back in MBRNotificationClosed.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   200
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   201
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   202
     * @param aData the returned data. The actual format 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   203
     *              is dependent on the actual notifier.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   204
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   205
    virtual void MBRDataReceived( CHbSymbianVariantMap& aData );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   206
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   207
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   208
     * From MBTNotificationResult.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   209
     * The notification is finished. The resulting data (e.g. user input or
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   210
     * acceptance/denial of the query) is passed back here.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   211
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   212
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   213
     * @param aErr KErrNone or one of the system-wide error codes.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   214
     * @param aData the returned data. The actual format 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   215
     *              is dependent on the actual notifier.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   216
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   217
    virtual void MBRNotificationClosed( TInt aError, const TDesC8& aData );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   218
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   219
// from base class MBtSimpleActiveObserver
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   220
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   221
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   222
     * From MBtSimpleActiveObserver.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   223
     * Callback to notify that an outstanding request has completed.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   224
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   225
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   226
     * @param aActive The active object helper that completed this request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   227
     * @param aStatus The status of the completed request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   228
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   229
    virtual void RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   230
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   231
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   232
     * From MBtSimpleActiveObserver.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   233
     * Callback for handling cancelation of an outstanding request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   234
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   235
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   236
     * @param aId The ID that identifies the outstanding request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   237
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   238
    virtual void CancelRequest( TInt aRequestId );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   239
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   240
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   241
     * Callback to notify that an error has occurred in RunL.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   242
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   243
     * @param aActive Pointer to the active object that completed.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   244
     * @param aError The error occurred in RunL.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   245
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   246
    virtual void HandleError( CBtSimpleActive* aActive, TInt aError );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   247
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   248
private:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   249
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   250
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   251
     * C++ default constructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   252
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   253
    CBTNotifPairingHelper( CBTNotifConnection* aConnection,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   254
                CBTNotifConnectionTracker* aTracker );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   255
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   256
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   257
     * Symbian 2nd-phase constructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   258
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   259
    void ConstructL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   260
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   261
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   262
     * Process the user input and complete the outstanding pairing request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   263
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   264
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   265
     * @param aError The result off the notification.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   266
     * @param aResult The user response; ETrue if the user accepted the query,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   267
     *                otherwise EFalse.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   268
     * @param aData The data returned from the notification dialog.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   269
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   270
    void CompletePairingNotifierL( TInt aError, TBool aResult, const TDesC8& aData );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   271
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   272
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   273
     * Completes a bonding operation.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   274
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   275
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   276
     * @param aError The result of the bonding attempt.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   277
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   278
    void CompleteBondingL( TInt aError );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   279
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   280
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   281
     * Completes a bonding operation.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   282
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   283
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   284
     * @param aError The result of the bonding attempt.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   285
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   286
    void CompleteJustWorksProcessingL( TInt aError );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   287
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   288
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   289
     * Ask the user to allow incoming pairing.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   290
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   291
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   292
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   293
    void StartAcceptPairingQueryL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   294
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   295
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   296
     * Process the user input and for accepting an incoming pairing and
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   297
     * continue with the outstanding pairing request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   298
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   299
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   300
     * @param aError The result of the notification.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   301
     * @param aResult The user response; ETrue if the user accepted the query,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   302
     *                otherwise EFalse.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   303
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   304
    void CompleteAcceptPairingQueryL( TInt aError, TBool aResult );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   305
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   306
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   307
     * Ask the user to set the device as trusted.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   308
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   309
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   310
     * @param aData The data returned from the notification dialog.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   311
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   312
    void StartTrustedQueryL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   313
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   314
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   315
     * Process the user input for setting the device as trusted.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   316
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   317
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   318
     * @param aError The result of the notification.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   319
     * @param aResult The user response; ETrue if the user accepted the query,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   320
     *                otherwise EFalse.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   321
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   322
    void CompleteTrustedQueryL( TInt aError, TBool aResult );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   323
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   324
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   325
     * Parse the parameters of a request for pairing.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   326
     * This function also returns values to use for dialog config, and sets
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   327
     * the operation state member variable (iOperation).
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   328
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   329
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   330
     * @param aLocallyInitiated On return, will be set to ETrue if the pairing 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   331
     *                          was initiated by us.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   332
     * @param aNumVal On return, this descriptor will contain a number to use in
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   333
     *                the pairing dialog. The meaning depends on the type of pairing.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   334
     * @param aDialogType On return, will contain the dialog type.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   335
     * @param aResourceId On return, will contain the resource id.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   336
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   337
    void ParseNotifierReqParamsL( TBool& aLocallyInitiated, TDes& aNumVal,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   338
                TBluetoothDialogParams::TBTDialogType& aDialogType,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   339
                TBTDialogResourceId& aResourceId );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   340
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   341
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   342
     * Parse the parameters of a request for pairing using pin query.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   343
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   344
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   345
     * @param aLocallyInitiated On return, will be set to ETrue if the pairing 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   346
     *                          was initiated by us.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   347
     * @param aNumVal On return, this will contain the minimum passcode length.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   348
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   349
    void ParsePinCodeReqParamsL( TBool& aLocallyInitiated, TUint& aNumVal );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   350
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   351
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   352
     * Parse the parameters of a request for pairing using numeric comparison.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   353
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   354
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   355
     * @param aLocallyInitiated On return, will be set to ETrue if the pairing 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   356
     *                          was initiated by us.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   357
     * @param aNumVal On return, this descriptor will contain the passkey to 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   358
     *                show to the user.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   359
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   360
    void ParseNumericCompReqParamsL( TBool& aLocallyInitiated, TDes& aNumVal );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   361
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   362
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   363
     * Parse the parameters of a request for pairing using passkey display.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   364
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   365
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   366
     * @param aLocallyInitiated On return, will be set to ETrue if the pairing 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   367
     *                          was initiated by us.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   368
     * @param aNumVal On return, this descriptor will contain the passkey to 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   369
     *                show to the user.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   370
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   371
    void ParsePasskeyDisplayReqParamsL( TBool& aLocallyInitiated, TDes& aNumVal );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   372
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   373
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   374
     * Check if we can guess the PIN and complete the notifier without 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   375
     * user interaction.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   376
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   377
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   378
     * @param aLocallyInitiated ETrue if we initiated the pairing, otherwise EFalse.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   379
     * @param aNumVal The minimum lenght of the passcode.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   380
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   381
    void CheckAutoPairingL( TBool aLocallyInitiated, const TDesC& aNumVal );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   382
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   383
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   384
     * Get a notification and configure it according to the current operation.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   385
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   386
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   387
     * @param aType The notification type.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   388
     * @param aResourceId Identifier for the resource to display.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   389
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   390
    void PrepareNotificationL( TBluetoothDialogParams::TBTDialogType aType,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   391
                TBTDialogResourceId aResourceId );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   392
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   393
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   394
     * Handle the result from a notification that is finished.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   395
     *
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   396
     * @since Symbian^4
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   397
     * @param aErr KErrNone or one of the system-wide error codes.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   398
     * @param aData The returned data. The actual format 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   399
     *              is dependent on the actual notifier.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   400
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   401
    void NotificationClosedL( TInt aError, const TDesC8& aData );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   402
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   403
private: // data
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   404
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   405
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   406
     * Identifier for the current operation.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   407
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   408
    TPairingOp iOperation;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   409
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   410
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   411
     * UID of the notifier pairing dialog request.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   412
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   413
    TInt iNotifierUid;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   414
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   415
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   416
     * Handle to the client message for dedicated bonding. Also serves as flag 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   417
     * indicating that we are performing dedicated bonding.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   418
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   419
    TInt iDedicatedBonding;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   420
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   421
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   422
     * Subsession with pairing server for dedicated bonding.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   423
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   424
    RBluetoothDedicatedBondingInitiator iBondingSession;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   425
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   426
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   427
     * Handle for general bonding.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   428
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   429
    RBTPhysicalLinkAdapter iBondingSocket;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   430
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   431
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   432
     * Buffer containing the parameters of the client message.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   433
     * Own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   434
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   435
    HBufC8* iParams;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   436
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   437
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   438
     * Active object helper for outgoing bonding.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   439
     * Own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   440
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   441
    CBtSimpleActive* iBondingActive;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   442
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   443
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   444
     * Pointer to the data record of the remote device.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   445
     * Not own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   446
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   447
    CBTDevice* iDevice;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   448
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   449
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   450
     * Pointer to an outstanding user interaction.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   451
     * Not own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   452
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   453
    CBluetoothNotification* iNotification;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   454
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   455
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   456
     * Pointer to the class that we are helping.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   457
     * Not own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   458
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   459
    CBTNotifConnection* iConnection;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   460
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   461
    /**
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   462
     * Pointer to our grandparent.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   463
     * Not own.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   464
     */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   465
    CBTNotifConnectionTracker* iTracker;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   466
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   467
    BTUNITTESTHOOK
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   468
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   469
    };
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   470
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   471
#endif // BTNOTIFPAIRINGHELPER_H