diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btnotif/btnotifsrv/src/btnotifconnectiontracker.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifconnectiontracker.cpp Tue Aug 31 15:25:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -/* -* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Bluetooth connection tracker and manager. -* -*/ - -#include "btnotifconnectiontracker.h" -#include -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif - -#include -#include - -#include "btnotifsession.h" -#include "btnotifclientserver.h" -#include "bluetoothtrace.h" -#include "btnotifsecuritymanager.h" - -/** Time window for determining if there are too many requests. */ -#ifndef __WINS__ -#define KDENYTHRESHOLD TTimeIntervalSeconds(3) -#else //__WINS__ -#define KDENYTHRESHOLD TTimeIntervalSeconds(5) -#endif //__WINS__ - - -// ======== LOCAL FUNCTIONS ======== - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -CBTNotifConnectionTracker::CBTNotifConnectionTracker( CBTNotifServer* aServer ) -: iServer( aServer ) - { - } - - -// --------------------------------------------------------------------------- -// Symbian 2nd-phase constructor -// --------------------------------------------------------------------------- -// -void CBTNotifConnectionTracker::ConstructL() - { - BOstraceFunctionEntry0( DUMMY_DEVLIST ); - // Open a handle to the registry server - User::LeaveIfError( iBTRegistrySession.Connect() ); - // Open a handle to the socket server - User::LeaveIfError( iSockServ.Connect() ); - iPairingManager = CBTNotifSecurityManager::NewL(*this, iServer->DevRepository() ); - BOstraceFunctionExit0( DUMMY_DEVLIST ); - } - - -// --------------------------------------------------------------------------- -// NewL. -// --------------------------------------------------------------------------- -// -CBTNotifConnectionTracker* CBTNotifConnectionTracker::NewL( CBTNotifServer* aServer ) - { - CBTNotifConnectionTracker* self = new( ELeave ) CBTNotifConnectionTracker( aServer ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CBTNotifConnectionTracker::~CBTNotifConnectionTracker() - { - BOstraceFunctionEntry0( DUMMY_DEVLIST ); - iDeniedRequests.Close(); - delete iPairingManager; - iSockServ.Close(); - iBTRegistrySession.Close(); - BOstraceFunctionExit0( DUMMY_DEVLIST ); - } - -// --------------------------------------------------------------------------- -// Process notifier message related to pairing notifiers. -// --------------------------------------------------------------------------- -// -void CBTNotifConnectionTracker::HandleNotifierRequestL( const RMessage2& aMessage ) - { - BOstraceFunctionEntryExt ( DUMMY_LIST, this, aMessage.Function() ); - iPairingManager->HandleNotifierRequestL(aMessage); - BOstraceFunctionExit1( DUMMY_DEVLIST, this ); - } - -// --------------------------------------------------------------------------- -// Handle a request related to pairing. -// --------------------------------------------------------------------------- -// -void CBTNotifConnectionTracker::HandleBondingRequestL( const RMessage2& aMessage ) - { - BOstraceFunctionEntryExt ( DUMMY_LIST, this, aMessage.Function() ); - iPairingManager->HandleBondingRequestL(aMessage); - BOstraceFunctionExit1( DUMMY_DEVLIST, this ); - } - -// --------------------------------------------------------------------------- -// Check if this device has been denied a connection already before. -// Also check if a previous connection attempt has just been rejected. -// --------------------------------------------------------------------------- -// -TBool CBTNotifConnectionTracker::UpdateBlockingHistoryL( const CBTDevice* aDevice, - TBool aAccepted ) - { - BOstraceFunctionEntry0( DUMMY_DEVLIST ); - __ASSERT_ALWAYS( aDevice, PanicServer( EBTNotifPanicBadArgument ) ); - // Check the time since the previous event. - TBool result = RecordConnectionAttempts( aAccepted ); - TInt pos = iDeniedRequests.Find( aDevice->BDAddr() ); - if( !aAccepted ) - { - if( pos == KErrNotFound ) - { - // The user denied the request from a new device, record the device address. - if( aDevice->IsValidPaired() && aDevice->IsPaired() ) - //[MCL]: && iDevice->LinkKeyType() != ELinkKeyUnauthenticatedUpgradable ) - { - // Paired devices are allowed one time rejection without a prompt for blocking. - result = EFalse; - } - iDeniedRequests.AppendL( aDevice->BDAddr() ); - } - // Nothing needed here if the address is already in the array. - } - else if( pos > KErrNotFound ) - { - // The user accepted a request, and it was from a device he/she - // previously rejected. Clear the history for this device from the array. - iDeniedRequests.Remove( pos ); - } - BOstraceFunctionExit0( DUMMY_DEVLIST ); - return result; - } - -// --------------------------------------------------------------------------- -// Record and check the time between connection attempts. -// --------------------------------------------------------------------------- -// -TBool CBTNotifConnectionTracker::RecordConnectionAttempts( TBool aAccepted ) - { - BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); - TBool result = ETrue; - TTime now( 0 ); - if( !aAccepted ) - { - now.UniversalTime(); - if( iLastReject ) - { - // Check the time between denied connections, that it does not go too fast. - TTimeIntervalSeconds prev( 0 ); - if( !now.SecondsFrom( TTime( iLastReject ), prev ) ) - { - if( prev <= KDENYTHRESHOLD ) - { - // We are getting the requests too fast. Present the user with - // an option to turn BT off. - //iServer->SettingsTracker()->SetPower( EFalse ); - result = EFalse; - } - } - } - } - // Record the current timestamp. - // It is reset in case the user accepted the request. - iLastReject = now.Int64(); - BOstraceFunctionExitExt( DUMMY_DEVLIST, this, result ); - return result; - } -