bluetoothengine/btnotif/btnotifsrv/src/btnotifpairnotifier.cpp
author hgs
Tue, 19 Oct 2010 15:09:34 +0300
changeset 70 f5508c13dfe0
parent 67 16e4b9007960
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     1
/*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     3
* All rights reserved.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     8
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    11
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    12
* Contributors:
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    13
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    14
* Description: 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    15
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    16
*/
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    17
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    18
#include "btnotifpairnotifier.h"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    19
#include "btnotifclientserver.h"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    20
#include <btextnotifiers.h>
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    21
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    22
#include <btextnotifierspartner.h>
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    23
#endif
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    24
#include "btnotifconnectiontracker.h"
42
hgs
parents: 31
diff changeset
    25
#include "btnotifsecuritymanager.h"
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    26
#include "btnotificationmanager.h"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    27
#include "bluetoothnotification.h"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    28
#include "btnotifserver.h"
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
    29
#include "btnotifbasepairinghandler.h"
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    30
#include "bluetoothtrace.h"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    32
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    33
/**  Format syntax for numeric comparison value. */
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    34
_LIT( KNumCompFormat, "%06u" );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    35
/**  Format syntax for passkey display value. */
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    36
_LIT( KPassKeyFormat, "%06u" );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    37
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    38
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    39
// ======== MEMBER FUNCTIONS ========
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    40
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    41
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    42
// C++ default constructor.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    43
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    44
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    45
CBTNotifPairNotifier::CBTNotifPairNotifier(
42
hgs
parents: 31
diff changeset
    46
        CBTNotifSecurityManager& aParent )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    47
:   iParent( aParent )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    48
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    49
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    50
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    52
// Symbian 2nd-phase constructor.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    53
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    54
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    55
void CBTNotifPairNotifier::ConstructL()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    56
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    57
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    58
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    60
// NewL
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    61
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    62
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    63
CBTNotifPairNotifier* CBTNotifPairNotifier::NewL(
42
hgs
parents: 31
diff changeset
    64
        CBTNotifSecurityManager& aParent )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    65
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    66
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    67
    CBTNotifPairNotifier* self = new( ELeave ) CBTNotifPairNotifier( aParent );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    68
    CleanupStack::PushL( self );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    69
    self->ConstructL();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    70
    CleanupStack::Pop( self );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    71
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    72
    return self;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    73
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    74
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    75
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    77
// Destructor.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    79
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    80
CBTNotifPairNotifier::~CBTNotifPairNotifier()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    81
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    82
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    83
    if( iNotification )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    84
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    85
        // Clear the notification callback, we cannot receive them anymore.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    86
        iNotification->RemoveObserver();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    87
        iNotification->Close(); // Also dequeues the notification from the queue.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    88
        iNotification = NULL;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    89
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    90
    iParams.Close();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    91
    if ( !iNotifierMessage.IsNull() )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    92
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    93
        iNotifierMessage.Complete( KErrServerTerminated );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    94
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    95
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    96
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    97
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    98
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    99
// Handle a notifier request for pairing with a remote device.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   100
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   101
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   102
void CBTNotifPairNotifier::StartPairingNotifierL(const RMessage2& aMessage )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   103
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   104
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   105
    
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   106
    TInt uid = aMessage.Int0();
42
hgs
parents: 31
diff changeset
   107
    TInt opCode = aMessage.Function();
70
hgs
parents: 67
diff changeset
   108
    BOstrace1(TRACE_DEBUG,DUMMY_DEVLIST,_L("[BTNotif]:Opcode: %d"),opCode);
42
hgs
parents: 31
diff changeset
   109
    
hgs
parents: 31
diff changeset
   110
    if ( (!iNotifierMessage.IsNull()) && 
hgs
parents: 31
diff changeset
   111
         (opCode != EBTNotifCancelNotifier )&&(opCode != EBTNotifUpdateNotifier))
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   112
        {
42
hgs
parents: 31
diff changeset
   113
        // todo: do we allow concurrent pairing?
70
hgs
parents: 67
diff changeset
   114
        BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,_L("[BTNotif]:We are busy"));
42
hgs
parents: 31
diff changeset
   115
        User::Leave(KErrServerBusy );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   116
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   117
    
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   118
    if(opCode == EBTNotifCancelNotifier)
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   119
        {
42
hgs
parents: 31
diff changeset
   120
        CancelPairingNotifierL(uid);
hgs
parents: 31
diff changeset
   121
        aMessage.Complete(KErrNone);
hgs
parents: 31
diff changeset
   122
        return;
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   123
        }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   124
    
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   125
    if(opCode != EBTNotifUpdateNotifier)
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   126
        {
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   127
        // Store the parameters locally, we need them later again.
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   128
        iParams.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) );
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   129
        aMessage.ReadL( EBTNotifSrvParamSlot, iParams );
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   130
        iNotifierMessage = aMessage;
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   131
        // Read the notifier parameters
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   132
        ParseNotifierReqParamsL();
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   133
        }
42
hgs
parents: 31
diff changeset
   134
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   135
    if(opCode ==EBTNotifUpdateNotifier )
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   136
        {
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   137
        UpdatePairingNotifierL(aMessage);
42
hgs
parents: 31
diff changeset
   138
        aMessage.Complete(KErrNone);
hgs
parents: 31
diff changeset
   139
        return;
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   140
        }
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   141
 
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   142
    const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   143
    if(dev)
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   144
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   145
        if (!iLocallyInitiated && dev->Device().GlobalSecurity().Banned() )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   146
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   147
            // If the device is banned and pairing is not locally initiated
42
hgs
parents: 31
diff changeset
   148
            // then we reject.
70
hgs
parents: 67
diff changeset
   149
            BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,_L("[BTNotif]:Device is banned"));
42
hgs
parents: 31
diff changeset
   150
            iNotifierMessage.Complete( KErrCancel );
hgs
parents: 31
diff changeset
   151
            return;
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   152
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   153
        if (iLocallyInitiated && dev->Device().GlobalSecurity().Banned())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   154
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   155
            // Remove the banned device from the blocking history
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   156
            iParent.ConnectionTracker().UpdateBlockingHistoryL(&dev->Device(),ETrue);
42
hgs
parents: 31
diff changeset
   157
            iParent.BlockDevice(dev->Addr(),EFalse);
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   158
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   159
        if(0 != dev->Device().FriendlyName().Length()&& dev->Device().IsValidFriendlyName())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   160
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   161
            // If we have a friendly name use it for the UI
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   162
            iCurrentDeviceName = dev->Device().FriendlyName();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   163
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   164
        else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   165
            {
67
16e4b9007960 201039_4
hgs
parents: 57
diff changeset
   166
            // We don't have any friendly name then check if we have the device name
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   167
            // otherwise use the Alias
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   168
            if(0 >= iCurrentDeviceName.Length())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   169
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   170
                iCurrentDeviceName = dev->Alias();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   171
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   172
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   173
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   174
    else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   175
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   176
        //If we didn't get a name then we make one from the Bluetooth device address
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   177
        if(0 >= iCurrentDeviceName.Length())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   178
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   179
            iRemote.GetReadable(iCurrentDeviceName);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   180
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   181
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   182
    // If this is an incoming pairing, we first ask the user to accept it.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   183
    if( !iLocallyInitiated  )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   184
        {
42
hgs
parents: 31
diff changeset
   185
        User::LeaveIfError(iParent.SetPairObserver(iRemote,ETrue));
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   186
        StartAcceptPairingQueryL();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   187
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   188
    else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   189
        {
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   190
        if(uid == KBTNumericComparisonNotifierUid.iUid || uid == KBTPasskeyDisplayNotifierUid.iUid)
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   191
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   192
            StartPairingUserInputL();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   193
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   194
        else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   195
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   196
            TBTPinCode pinCode;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   197
            if ( iMinPinLength > -1 )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   198
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   199
                // Legacy Pin pairing. Check if a pin code is already available
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   200
                // in pairing manager for this device:
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   201
                iParent.GetPinCode( pinCode, iRemote, iMinPinLength );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   202
                }
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   203
            if ( pinCode().iLength > 0 )        
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   204
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   205
                // a pin is ready for this pairing.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   206
                // write it back to client (stack)
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   207
                TInt err = iNotifierMessage.Write( EBTNotifSrvReplySlot, pinCode );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   208
                iNotifierMessage.Complete( err );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   209
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   210
            else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   211
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   212
                // no pin code is available or a pin code does not meet
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   213
                // the security requirement.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   214
                // User need to interact:
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   215
                StartPairingUserInputL();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   216
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   217
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   218
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   219
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   220
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   221
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   222
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   223
// Update a notifier, update the outstanding dialog if the notifier request 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   224
// is currently being served.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   225
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   226
//
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   227
void CBTNotifPairNotifier::UpdatePairingNotifierL( const RMessage2& aMessage )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   228
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   229
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   230
    RBuf8 msgParams;
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   231
    msgParams.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) );
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   232
    aMessage.ReadL( EBTNotifSrvParamSlot, msgParams );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   233
    TBTNotifierUpdateParams2 params;    // Enough for reading the base class type parameter
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   234
    TPckgC<TBTNotifierUpdateParams2> paramsPckg( params );
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   235
    paramsPckg.Set( msgParams );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   236
    if( paramsPckg().Type() == TBTNotifierUpdateParams2::EPasskeyDisplay )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   237
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   238
        // Paskey display update - keypress on remote device.
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   239
        TBTPasskeyDisplayUpdateParams keyUpdate;
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   240
        TPckgC<TBTPasskeyDisplayUpdateParams> keyUpdatePckg( keyUpdate );
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   241
        keyUpdatePckg.Set(msgParams);
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   242
        THCIPasskeyEntryNotificationType keyType = keyUpdatePckg().KeypressNotification();
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   243
        if( iNotification )
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   244
            {
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   245
            // Update the dialog
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   246
            iNotification->Update(keyType);
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   247
            }        
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   248
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   249
    else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   250
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   251
        // name update
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   252
        TBTDeviceNameUpdateParams nameUpdate;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   253
        TPckgC<TBTDeviceNameUpdateParams> nameUpdatePckg( nameUpdate );
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   254
        nameUpdatePckg.Set( msgParams );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   255
        // The result means result of conversion to unicode
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   256
        if( !nameUpdatePckg().Result() )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   257
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   258
            // Check first if we already have a friendly name
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   259
            const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   260
            if(dev)
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   261
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   262
                if(0 != dev->Device().FriendlyName().Length()&& dev->Device().IsValidFriendlyName())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   263
                    {
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   264
                    iCurrentDeviceName = dev->Device().FriendlyName();
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   265
                    }
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   266
                else
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   267
                    {
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   268
                    // We don't have a friendly name then use this name
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   269
                    iCurrentDeviceName = nameUpdatePckg().DeviceName();
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   270
                    if(0 == iCurrentDeviceName.Length())
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   271
                        {
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   272
                        // The new name is empty then use the Alias
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   273
                        iCurrentDeviceName = dev->Alias();
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   274
                        }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   275
                    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   276
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   277
            else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   278
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   279
                // We don't have a friendly name then use this name
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   280
                iCurrentDeviceName = nameUpdatePckg().DeviceName();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   281
                if(0 == iCurrentDeviceName.Length())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   282
                    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   283
                    // The new name is empty then use the Alias
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   284
                    iRemote.GetReadable(iCurrentDeviceName);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   285
                    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   286
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   287
            if( iNotification )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   288
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   289
                // Update the dialog with the new name. It is up to the dialog to 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   290
                // determine the validity (in case another dialog is shown).
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   291
                iNotification->Update(iCurrentDeviceName);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   292
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   293
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   294
        }
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   295
    msgParams.Close();
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   296
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   297
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   298
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   299
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   300
// Cancel a request, dismiss the outstanding dialog if the notifier request 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   301
// is currently being served.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   302
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   303
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   304
void CBTNotifPairNotifier::CancelPairingNotifierL( TInt aUid )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   305
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   306
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   307
    if(  iNotifierMessage.Int0() == aUid )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   308
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   309
        if( iNotification )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   310
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   311
            // Cancel the user query
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   312
            // This will also unregister us from the notification.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   313
            TInt err = iNotification->Close();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   314
            NOTIF_NOTHANDLED( !err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   315
            iNotification = NULL;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   316
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   317
        // todo: Any bonding requester needs to be informed.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   318
        // Currently we don't show any "Unable to pair" note
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   319
        // so no need to inform any bonding requester.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   320
        if ( !iNotifierMessage.IsNull() )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   321
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   322
            iNotifierMessage.Complete( KErrCancel );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   323
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   324
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   325
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   326
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   327
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   328
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   329
// From class MBTNotificationResult.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   330
// Handle a result from a user query.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   331
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   332
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   333
void CBTNotifPairNotifier::MBRDataReceived( CHbSymbianVariantMap& aData )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   334
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   335
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
42
hgs
parents: 31
diff changeset
   336
    if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0)
hgs
parents: 31
diff changeset
   337
        {
hgs
parents: 31
diff changeset
   338
        TInt val = *(static_cast<TInt*>(aData.Get(_L("actionResult"))->Data()));
hgs
parents: 31
diff changeset
   339
        if(val)
hgs
parents: 31
diff changeset
   340
            {
hgs
parents: 31
diff changeset
   341
                iAcceptPairingResult = ETrue;
hgs
parents: 31
diff changeset
   342
            }
hgs
parents: 31
diff changeset
   343
        else
hgs
parents: 31
diff changeset
   344
            {
hgs
parents: 31
diff changeset
   345
                iAcceptPairingResult = EFalse;
hgs
parents: 31
diff changeset
   346
            }
hgs
parents: 31
diff changeset
   347
        }
hgs
parents: 31
diff changeset
   348
    else if(aData.Keys().MdcaPoint(0).Compare(_L("checkBoxState")) == 0)
hgs
parents: 31
diff changeset
   349
        {
hgs
parents: 31
diff changeset
   350
        iCheckBoxState = *(static_cast<TInt*>(aData.Get(_L("checkBoxState"))->Data()));
hgs
parents: 31
diff changeset
   351
        }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   352
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   353
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   354
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   355
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   356
// From class MBTNotificationResult.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   357
// The notification is finished.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   358
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   359
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   360
void CBTNotifPairNotifier::MBRNotificationClosed( TInt aError, const TDesC8& aData )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   361
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   362
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aError );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   363
    // First unregister from the notification, so we can already get the next one.
42
hgs
parents: 31
diff changeset
   364
    iNotification->RemoveObserver();
hgs
parents: 31
diff changeset
   365
    iNotification = NULL;
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   366
    TRAP_IGNORE( NotificationClosedL( aError, aData ) );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   367
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   368
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   369
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   370
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   371
// Request a user input for the outstanding pairing request.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   372
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   373
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   374
void CBTNotifPairNotifier::StartPairingUserInputL()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   375
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   376
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   377
    PrepareNotificationL( iDialog, iDialogResource );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   378
    iState = EPairingInputConfirm;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   379
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   380
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   381
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   382
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   383
// Process the user input and complete the outstanding pairing request.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   384
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   385
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   386
void CBTNotifPairNotifier::CompletePairingNotifierL( TInt aError, TBool aResult,
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   387
    const TDesC8& aData )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   388
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   389
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aError );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   390
    if ( iNotifierMessage.IsNull() )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   391
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   392
        // Request not anymore active -> ignore
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   393
        return;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   394
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   395
    TInt err = aError;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   396
    TPtrC8 resultData(KNullDesC8);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   397
    TBTPinCode pinCode;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   398
    TPckgBuf<TBool> userAcceptance;
42
hgs
parents: 31
diff changeset
   399
    TInt uid = iNotifierMessage.Int0();
hgs
parents: 31
diff changeset
   400
 
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   401
    if( !err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   402
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   403
        // The returned data is the entered passkey.
42
hgs
parents: 31
diff changeset
   404
        const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote);
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   405
42
hgs
parents: 31
diff changeset
   406
        if(dev)
hgs
parents: 31
diff changeset
   407
            {
hgs
parents: 31
diff changeset
   408
            iParent.ConnectionTracker().UpdateBlockingHistoryL(&dev->Device(),aResult);
hgs
parents: 31
diff changeset
   409
            }
hgs
parents: 31
diff changeset
   410
         if( uid == KBTNumericComparisonNotifierUid.iUid )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   411
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   412
            // Numeric comparison needs the boolean result passed back.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   413
            userAcceptance() = aResult;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   414
            resultData.Set( userAcceptance );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   415
            }
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   416
         if( aResult )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   417
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   418
            if( uid == KBTManPinNotifierUid.iUid 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   419
                || uid == KBTPinCodeEntryNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   420
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   421
                // Check the passkey entered by the user.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   422
                // The length of the returned data equals the number of characters
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   423
                // entered by the user.
42
hgs
parents: 31
diff changeset
   424
                // Check that the passkey length do not exceed the maximum allowed size
hgs
parents: 31
diff changeset
   425
                TInt pinCodeLength = aData.Length();
hgs
parents: 31
diff changeset
   426
                if(pinCodeLength > KHCIPINCodeSize)
hgs
parents: 31
diff changeset
   427
                    {
hgs
parents: 31
diff changeset
   428
                        pinCodeLength = KHCIPINCodeSize;
hgs
parents: 31
diff changeset
   429
                    }
hgs
parents: 31
diff changeset
   430
                pinCode().iLength = pinCodeLength;
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   431
                // Check that the length of the passkey meets the minimum 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   432
                // required pin code length
42
hgs
parents: 31
diff changeset
   433
                if( pinCodeLength >= iMinPinLength )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   434
                    {
42
hgs
parents: 31
diff changeset
   435
                    for( TInt i = 0; i < pinCodeLength; i++ )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   436
                        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   437
                        pinCode().iPIN[i] = aData[i];
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   438
                        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   439
                    resultData.Set( pinCode );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   440
                    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   441
                else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   442
                    {
42
hgs
parents: 31
diff changeset
   443
                    // shouldn't happen since the length is checked in the dialog
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   444
                    err = KErrCompletion;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   445
                    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   446
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   447
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   448
        else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   449
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   450
            err = KErrCancel;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   451
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   452
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   453
    // Complete the message with the result, and result data if any.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   454
    if ( !err && resultData.Length() )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   455
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   456
        err = iNotifierMessage.Write( EBTNotifSrvReplySlot, resultData );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   457
        }
42
hgs
parents: 31
diff changeset
   458
    if(err && (uid == KBTNumericComparisonNotifierUid.iUid))
hgs
parents: 31
diff changeset
   459
        {
hgs
parents: 31
diff changeset
   460
        // We need to reject the numeric comparaison otherwise
hgs
parents: 31
diff changeset
   461
        // the link will remain active
hgs
parents: 31
diff changeset
   462
        userAcceptance() = aResult;
hgs
parents: 31
diff changeset
   463
        resultData.Set( userAcceptance );
hgs
parents: 31
diff changeset
   464
        err = iNotifierMessage.Write( EBTNotifSrvReplySlot, resultData );
hgs
parents: 31
diff changeset
   465
        }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   466
    iNotifierMessage.Complete( err );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   467
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   468
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   469
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   470
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   471
// Ask the user to allow incoming pairing.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   472
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   473
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   474
void CBTNotifPairNotifier::StartAcceptPairingQueryL()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   475
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   476
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
42
hgs
parents: 31
diff changeset
   477
    PrepareNotificationL( TBluetoothDialogParams::EUserAuthorization, EAuthorization );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   478
    iState = EIncomingPairingAcceptconfirm;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   479
    // if rejected, the client message is completed in CompleteAcceptPairingQueryL
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   480
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   481
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   482
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   483
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   484
// The user was asked to accept an incoming pairing. Process and proceed. 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   485
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   486
//
42
hgs
parents: 31
diff changeset
   487
void CBTNotifPairNotifier::CompleteAcceptPairingQueryL( TInt aError)
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   488
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   489
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   490
    TInt err = aError;
42
hgs
parents: 31
diff changeset
   491
    TBool proceed = EFalse;
hgs
parents: 31
diff changeset
   492
    
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   493
    if( !err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   494
        {
42
hgs
parents: 31
diff changeset
   495
        const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote);
hgs
parents: 31
diff changeset
   496
        if(dev)
hgs
parents: 31
diff changeset
   497
            {
hgs
parents: 31
diff changeset
   498
            proceed = iParent.ConnectionTracker().UpdateBlockingHistoryL(&dev->Device(),iAcceptPairingResult);
hgs
parents: 31
diff changeset
   499
            }
hgs
parents: 31
diff changeset
   500
        if( iAcceptPairingResult )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   501
            {
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   502
            if(iCheckBoxState)
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   503
                {
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   504
                (iParent.PairingHandler())->SetTrusted();
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   505
                }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   506
            StartPairingUserInputL();
42
hgs
parents: 31
diff changeset
   507
            }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   508
        else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   509
            {
42
hgs
parents: 31
diff changeset
   510
            if( proceed && iCheckBoxState )
hgs
parents: 31
diff changeset
   511
                {
hgs
parents: 31
diff changeset
   512
                //ask to block the device.
hgs
parents: 31
diff changeset
   513
                iParent.BlockDevice(iRemote,proceed);
hgs
parents: 31
diff changeset
   514
                }
hgs
parents: 31
diff changeset
   515
            err = iParent.SetPairObserver(iRemote,EFalse);
hgs
parents: 31
diff changeset
   516
            err = KErrCancel; // We need to complete the pairing request here
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   517
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   518
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   519
    if( err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   520
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   521
        // The user denied the connection, or something else prevented completion.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   522
        CompletePairingNotifierL( err, EFalse, KNullDesC8 );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   523
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   524
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   525
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   526
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   527
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   528
// Parse the parameters of a request for pairing.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   529
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   530
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   531
void CBTNotifPairNotifier::ParseNotifierReqParamsL()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   532
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   533
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   534
    // Reset to make sure all vars contain initial values.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   535
    iLocallyInitiated = EFalse;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   536
    iDialogNumeric.Zero();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   537
    iDialog = TBluetoothDialogParams::EInvalidDialog;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   538
    iDialogResource = ENoResource;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   539
    iRemote = TBTDevAddr();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   540
    iMinPinLength = -1;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   541
    
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   542
    TInt uid = iNotifierMessage.Int0();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   543
    // Reset for other pairing modes than PIN code.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   544
    // Determine the notifier type by the length of the parameter buffer
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   545
    if( uid == KBTManPinNotifierUid.iUid || uid == KBTPinCodeEntryNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   546
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   547
        if ( uid == KBTManPinNotifierUid.iUid ) 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   548
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   549
            ParseLegacyPinCodeReqParamsL( iLocallyInitiated, iMinPinLength, iRemote );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   550
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   551
        else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   552
            {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   553
            ParsePinCodeReqParamsL( iLocallyInitiated, iMinPinLength, iRemote );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   554
            }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   555
        iDialog = TBluetoothDialogParams::EInput;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   556
        iDialogResource = EPinInput;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   557
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   558
    else if( uid == KBTNumericComparisonNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   559
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   560
        ParseNumericCompReqParamsL( iLocallyInitiated, iDialogNumeric, iRemote );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   561
        iDialog = TBluetoothDialogParams::EQuery;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   562
        iDialogResource = ENumericComparison;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   563
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   564
    else if( uid == KBTPasskeyDisplayNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   565
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   566
        ParsePasskeyDisplayReqParamsL( iLocallyInitiated, iDialogNumeric, iRemote );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   567
        iDialog = TBluetoothDialogParams::EQuery;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   568
        iDialogResource = EPasskeyDisplay;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   569
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   570
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   571
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   572
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   573
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   574
// Parse the parameters of a request for pairing using pin query.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   575
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   576
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   577
void CBTNotifPairNotifier::ParseLegacyPinCodeReqParamsL( TBool& aLocallyInitiated,
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   578
    TInt& aMinPinLength, TBTDevAddr& aAddr )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   579
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   580
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   581
    TBTPasskeyNotifierParams params;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   582
    TPckgC<TBTPasskeyNotifierParams> paramsPckg( params );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   583
    paramsPckg.Set( iParams );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   584
    aLocallyInitiated = paramsPckg().iLocallyInitiated;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   585
    aMinPinLength = paramsPckg().iPasskeyMinLength;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   586
    aAddr = paramsPckg().iBDAddr;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   587
    iCurrentDeviceName = paramsPckg().iName;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   588
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   589
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   590
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   591
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   592
// Parse the parameters of a request for pairing using pin query.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   593
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   594
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   595
void CBTNotifPairNotifier::ParsePinCodeReqParamsL( TBool& aLocallyInitiated,
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   596
    TInt& aMinPinLength, TBTDevAddr& aAddr )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   597
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   598
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   599
    TBTPinCodeEntryNotifierParams params;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   600
    TPckgC<TBTPinCodeEntryNotifierParams> paramsPckg( params );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   601
    paramsPckg.Set( iParams );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   602
    aLocallyInitiated = paramsPckg().LocallyInitiated();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   603
    aMinPinLength = paramsPckg().PinCodeMinLength();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   604
    aAddr = paramsPckg().DeviceAddress();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   605
    iCurrentDeviceName = paramsPckg().DeviceName();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   606
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   607
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   608
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   609
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   610
// Parse the parameters of a request for pairing using numeric comparison.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   611
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   612
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   613
void CBTNotifPairNotifier::ParseNumericCompReqParamsL( TBool& aLocallyInitiated,
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   614
    TDes& aNumVal, TBTDevAddr& aAddr )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   615
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   616
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   617
    TBTNumericComparisonParams params;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   618
    TPckgC<TBTNumericComparisonParams> paramsPckg( params );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   619
    paramsPckg.Set( iParams );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   620
    aLocallyInitiated = paramsPckg().LocallyInitiated();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   621
    TBTNumericComparisonParams::TComparisonScenario scenario =
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   622
                paramsPckg().ComparisonScenario();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   623
    aNumVal.Format( KNumCompFormat, paramsPckg().NumericalValue() );
42
hgs
parents: 31
diff changeset
   624
    aNumVal.Insert(3,_L(" "));
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   625
    aAddr = paramsPckg().DeviceAddress();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   626
    iCurrentDeviceName = paramsPckg().DeviceName();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   627
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   628
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   629
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   630
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   631
// Parse the parameters of a request for pairing using passkey display.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   632
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   633
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   634
void CBTNotifPairNotifier::ParsePasskeyDisplayReqParamsL( TBool& aLocallyInitiated,
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   635
    TDes& aNumVal, TBTDevAddr& aAddr )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   636
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   637
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   638
    TBTPasskeyDisplayParams params;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   639
    TPckgC<TBTPasskeyDisplayParams> paramsPckg( params );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   640
    paramsPckg.Set( iParams );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   641
    aLocallyInitiated = paramsPckg().LocallyInitiated();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   642
    aNumVal.Format( KPassKeyFormat, paramsPckg().NumericalValue() );
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   643
    aNumVal.Insert(3,_L(" "));
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   644
    aAddr = paramsPckg().DeviceAddress();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   645
    iCurrentDeviceName = paramsPckg().DeviceName();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   646
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   647
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   648
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   649
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   650
// Get and configure a notification.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   651
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   652
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   653
void CBTNotifPairNotifier::PrepareNotificationL( TBluetoothDialogParams::TBTDialogType aType,
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   654
    TBTDialogResourceId aResourceId )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   655
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   656
    BOstraceFunctionEntry0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   657
    iNotification = 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   658
            iParent.ConnectionTracker().NotificationManager()->GetNotification();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   659
    User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   660
    iNotification->SetObserver( this );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   661
    iNotification->SetNotificationType( aType, aResourceId );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   662
    TInt err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceName, iCurrentDeviceName );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   663
    NOTIF_NOTHANDLED( !err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   664
    TBTDeviceName name;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   665
    iRemote.GetReadable(name);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   666
    err = iNotification->SetData( TBluetoothDialogParams::EAddress, name );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   667
    NOTIF_NOTHANDLED( !err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   668
    const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   669
    TInt classofdevice = 0;
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   670
    if(dev)
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   671
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   672
            if(dev->Device().IsValidDeviceClass())
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   673
                {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   674
                classofdevice = dev->Device().DeviceClass().DeviceClass();
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   675
                }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   676
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   677
    err = iNotification->SetData( (TInt) TBluetoothDeviceDialog::EDeviceClass, 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   678
                classofdevice );
42
hgs
parents: 31
diff changeset
   679
    if( iDialogNumeric.Length() )
hgs
parents: 31
diff changeset
   680
        {
hgs
parents: 31
diff changeset
   681
        err = iNotification->SetData( 
hgs
parents: 31
diff changeset
   682
        TBluetoothDeviceDialog::EAdditionalDesc, iDialogNumeric );
hgs
parents: 31
diff changeset
   683
        }
hgs
parents: 31
diff changeset
   684
    err = iNotification->SetData( TBluetoothDialogParams::EDialogTitle, TBluetoothDialogParams::EPairingRequest);
hgs
parents: 31
diff changeset
   685
    iCheckBoxState = ETrue;
hgs
parents: 31
diff changeset
   686
    iAcceptPairingResult = EFalse;
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   687
    iParent.ConnectionTracker().NotificationManager()->QueueNotificationL( iNotification);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   688
    NOTIF_NOTHANDLED( !err )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   689
    BOstraceFunctionExit0( DUMMY_DEVLIST );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   690
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   691
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   692
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   693
// The notification is finished, handle the result.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   694
// ---------------------------------------------------------------------------
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   695
//
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   696
void CBTNotifPairNotifier::NotificationClosedL( TInt aError, const TDesC8& aData )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   697
    {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   698
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aError );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   699
    // Read the result.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   700
    TPckgC<TBool> result( EFalse );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   701
    result.Set( aData.Ptr(), result.Length() ); // Read the part containing the result
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   702
    // Set a pointer descriptor to capture the remaining data, if any.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   703
    TPtrC8 dataPtr( aData.Mid( result.Length() ) );
57
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   704
    
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   705
    if(!result())
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   706
        {
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   707
        (iParent.PairingHandler())->PairingCancelledByUser();
5ebadcda06cb 201035_7
hgs
parents: 47
diff changeset
   708
        }
42
hgs
parents: 31
diff changeset
   709
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   710
    if ( iState == EIncomingPairingAcceptconfirm )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   711
        {
42
hgs
parents: 31
diff changeset
   712
        CompleteAcceptPairingQueryL(aError);
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   713
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   714
    else
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   715
        {
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   716
        CompletePairingNotifierL( aError, result(), dataPtr );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   717
        }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   718
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   719
    }
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   720
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   721
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   722
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   723