bluetoothengine/btnotif/btnotifsrv/src/btnotifsession.cpp
author hgs
Tue, 19 Oct 2010 15:09:34 +0300
changeset 70 f5508c13dfe0
parent 57 5ebadcda06cb
permissions -rw-r--r--
201041
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>
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    20
#include <btnotif.h>
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    21
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    22
#include <btextnotifierspartner.h>
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    23
#endif
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    24
#include "btnotifclientserver.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
#include "btnotifsettingstracker.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
#include "btnotifconnectiontracker.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
#include "btnotifdeviceselector.h"
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    28
#include "btnotifgeninfonotifier.h"
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    29
#include "btnotifpowernotifier.h"
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    30
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
// ======== LOCAL FUNCTIONS ========
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
// Start the server.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
void LeaveIfNullL( const TAny* aPtr, TInt aLeaveCode )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
    if( aPtr == NULL )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
        User::Leave( aLeaveCode );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
// ======== MEMBER FUNCTIONS ========
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
// C++ default constructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
CBTNotifSession::CBTNotifSession()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
:   CSession2()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
// Symbian 2nd-phase constructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
void CBTNotifSession::ConstructL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
// NewL.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
CBTNotifSession* CBTNotifSession::NewL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
    CBTNotifSession* self = new( ELeave ) CBTNotifSession();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
    CleanupStack::PushL( self );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
    self->ConstructL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
    CleanupStack::Pop( self );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
    return self;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
// Destructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
CBTNotifSession::~CBTNotifSession()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
    {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    85
    // clients must complete the message they are responsible for
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    86
    // we do not complete any message here
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
    Server()->RemoveSession();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
// From class CSession2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
// Receives a message from a client.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    94
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
void CBTNotifSession::ServiceL( const RMessage2& aMessage )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    96
    {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    97
    CBTNotifConnectionTracker* connTracker = Server()->ConnectionTracker();
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    98
    CBTNotifGenInfoNotifier* genInfoNotifier = Server()->GenericInfoNotifier();
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    99
    CBTNotifPowerNotifier* bTPowerNotifier = Server()->BTPowerNotifier();
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
    TInt opCode = aMessage.Function();
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   101
    TInt uid = aMessage.Int0();
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   102
    TInt err( KErrNotReady );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   103
    switch(opCode){
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   104
        case EBTNotifCancelNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   105
        case EBTNotifStartSyncNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   106
        case EBTNotifStartAsyncNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   107
        case EBTNotifUpdateNotifier:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   108
            if( uid == KDeviceSelectionNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   109
                {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   110
                TRAP( err, {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   111
                        CBTNotifDeviceSelector& selector = Server()->DeviceSelectorL();
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   112
                        selector.DispatchNotifierMessageL( aMessage ); }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   113
                        );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   114
                if ( err )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   115
                    {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   116
                    aMessage.Complete( err );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   117
                    }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   118
                    // deviceselector takes the ownership of aMessage.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   119
                }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   120
            else
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   121
                {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   122
                // PIN/ SSP pairing notifiers from BT stack:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   123
                // ***** Note for implementers:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   124
                // message queue is not used for this notifier handling.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   125
                if ( uid == KBTManAuthNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   126
                     uid == KBTManPinNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   127
                     uid == KBTPinCodeEntryNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   128
                     uid == KBTNumericComparisonNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   129
                     uid == KBTPasskeyDisplayNotifierUid.iUid ||
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   130
                     uid == KBTUserConfirmationNotifierUid.iUid )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   131
                    {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   132
                    if( connTracker )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   133
                        {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   134
                         // Pass it to the connection tracker.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   135
                         TRAP( err, 
42
hgs
parents: 31
diff changeset
   136
                                 connTracker->HandleNotifierRequestL( aMessage ) );
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   137
                        }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   138
                    if ( err )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   139
                        {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   140
                        // tracker not available, can't do this now.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   141
                        aMessage.Complete( err );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   142
                        }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   143
                    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   144
                else
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   145
                    {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   146
                    if(uid == KBTGenericInfoNotifierUid.iUid & NULL != genInfoNotifier)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   147
                        {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   148
                            TRAP(err,genInfoNotifier->HandleNotifierRequestL(aMessage));
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   149
                            if(err)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   150
                                {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   151
                                aMessage.Complete(err);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   152
                                }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   153
                        }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   154
                    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   155
                    else if(uid == KPowerModeSettingNotifierUid.iUid && NULL != bTPowerNotifier)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   156
                        {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   157
                        TRAP(err, bTPowerNotifier->HandleNotifierRequestL(aMessage));
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   158
                        if(err)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   159
                            {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   160
                            aMessage.Complete(err);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   161
                            }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   162
                        }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   163
                    }
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   164
                }
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   165
            break;
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   166
        case EBTNotifPairDevice:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   167
        case EBTNotifCancelPairDevice:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   168
            // Pairing requests from clients:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   169
            if ( connTracker )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   170
                {
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   171
                TRAP( err, connTracker->HandleBondingRequestL( aMessage ) );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   172
                }
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   173
            if ( err )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   174
                {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   175
                // tracker not available, can't do this now.
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   176
                aMessage.Complete( err );            
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   177
                }
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   178
            break;
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   179
        default:
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   180
            aMessage.Complete( KErrNotSupported );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   181
            break;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   182
    }
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   183
}
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   184
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   185
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   186
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   187
// From class CSession2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   188
// Completes construction of the session.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   189
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   190
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   191
void CBTNotifSession::CreateL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   192
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   193
    Server()->AddSession();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   194
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   195