bluetoothengine/btnotif/btnotifsrv/src/btnotifsession.cpp
author hgs
Mon, 17 May 2010 11:06:23 +0300
changeset 31 a0ea99b6fa53
parent 29 48ae3789ce00
child 40 997690c3397a
permissions -rw-r--r--
201019_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     1
/*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     3
* All rights reserved.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     4
* This component and the accompanying materials are made available
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     6
* which accompanies this distribution, and is available
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     8
*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
     9
* Initial Contributors:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    10
* Nokia Corporation - initial contribution.
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    11
*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    12
* Contributors:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    13
*
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    14
* Description: Session class for handling commands from clients.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    15
*
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    16
*/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    17
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    18
#include "btnotifsession.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    19
#include <btextnotifiers.h>
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    20
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    21
#include <btextnotifierspartner.h>
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    22
#endif
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    23
#include "btnotifclientserver.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    24
#include "btnotifsettingstracker.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
#include "btnotifconnectiontracker.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
#include "btnotifdeviceselector.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    29
// ======== LOCAL FUNCTIONS ========
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    30
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
// Start the server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
void LeaveIfNullL( const TAny* aPtr, TInt aLeaveCode )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
    if( aPtr == NULL )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
        User::Leave( aLeaveCode );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
// ======== MEMBER FUNCTIONS ========
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
// C++ default constructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
CBTNotifSession::CBTNotifSession()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
:   CSession2()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
// Symbian 2nd-phase constructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
void CBTNotifSession::ConstructL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
// NewL.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
CBTNotifSession* CBTNotifSession::NewL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
    CBTNotifSession* self = new( ELeave ) CBTNotifSession();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
    CleanupStack::PushL( self );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
    self->ConstructL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
    CleanupStack::Pop( self );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
    return self;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
// Destructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
CBTNotifSession::~CBTNotifSession()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
    {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    82
    // clients must complete the message they are responsible for
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    83
    // we do not complete any message here
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
    Server()->RemoveSession();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
// From class CSession2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
// Receives a message from a client.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
void CBTNotifSession::ServiceL( const RMessage2& aMessage )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
    {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    94
    CBTNotifConnectionTracker* connTracker = Server()->ConnectionTracker();
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
    TInt opCode = aMessage.Function();
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    96
    TInt uid = aMessage.Int0();
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    97
    TInt err( KErrNotReady );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    98
    switch(opCode){
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    99
        case EBTNotifCancelNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   100
        case EBTNotifStartSyncNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   101
        case EBTNotifStartAsyncNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   102
        case EBTNotifUpdateNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   103
            if( uid == KDeviceSelectionNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   104
                {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   105
                TRAP( err, {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   106
                        CBTNotifDeviceSelector& selector = Server()->DeviceSelectorL();
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   107
                        selector.DispatchNotifierMessageL( aMessage ); }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   108
                        );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   109
                if ( err )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   110
                    {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   111
                    aMessage.Complete( err );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   112
                    }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   113
                    // deviceselector takes the ownership of aMessage.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   114
                }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   115
            else
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   116
                {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   117
                // PIN/ SSP pairing notifiers from BT stack:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   118
                // ***** Note for implementers:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   119
                // message queue is not used for this notifier handling.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   120
                if ( uid == KBTManAuthNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   121
                     uid == KBTManPinNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   122
                     uid == KBTPinCodeEntryNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   123
                     uid == KBTNumericComparisonNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   124
                     uid == KBTPasskeyDisplayNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   125
                     uid == KBTUserConfirmationNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   126
                    {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   127
                    if( connTracker )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   128
                        {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   129
                         // Pass it to the connection tracker.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   130
                         TRAP( err, 
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   131
                                 connTracker->HandlePairingNotifierRequestL( aMessage ) );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   132
                        }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   133
                    if ( err )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   134
                        {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   135
                        // tracker not available, can't do this now.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   136
                        aMessage.Complete( err );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   137
                        }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   138
                    }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   139
                }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   140
            break;
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   141
        case EBTNotifPairDevice:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   142
        case EBTNotifCancelPairDevice:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   143
            // Pairing requests from clients:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   144
            if ( connTracker )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   145
                {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   146
                TRAP( err, connTracker->HandleBondingRequestL( aMessage ) );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   147
                }
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   148
            if ( err )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
                {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   150
                // tracker not available, can't do this now.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   151
                aMessage.Complete( err );            
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
                }
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   153
            break;
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   154
        default:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   155
            aMessage.Complete( KErrNotSupported );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   156
            break;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   157
    }
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   158
}
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   159
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   160
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   162
// From class CSession2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   163
// Completes construction of the session.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   164
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   165
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   166
void CBTNotifSession::CreateL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   167
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   168
    Server()->AddSession();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   169
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   170