bluetoothengine/btnotif/src/BTNotifier.cpp
branchRCL_3
changeset 55 613943a21004
parent 54 0ba996a9b75d
child 56 9386f31cc85b
--- a/bluetoothengine/btnotif/src/BTNotifier.cpp	Thu Aug 19 10:05:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,772 +0,0 @@
-/*
-* Copyright (c) 2002 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:  Declares Bluetooth notifiers base class.
-*
-*/
-
-
-// INCLUDE FILES
-#include <centralrepository.h> 
-#include <CoreApplicationUIsSDKCRKeys.h>
-
-#include <settingsinternalcrkeys.h>
-#include <e32property.h>
-
-#include <btengsettings.h>
-#include <btengprivatecrkeys.h>
-#include <btengconnman.h>
-#include <btengutil.h>
-#include <StringLoader.h>    // Localisation stringloader
-#include <BTNotif.rsg>       // Own resources
-#include <featmgr.h>            // Feature Manager API
-#include <utf.h>             // CnvUtfConverter
-#include <bluetoothuiutil.h>
-#include "btnotifier.h"      // Own class definition
-#include "btNotifDebug.h"    // Debugging macros
-#include "btnotiflock.h"
-#include "btnotif.hrh"       // define MaxNameLength
-#include "btnotifpanic.h"
-#include "btnotifnameutils.h"
-
-#ifdef __SERIES60_HELP
-#include <hlplch.h>
-#include <csxhelp/bt.hlp.hrh> // The bt hrh info is needed, for help launching
-#endif
-
-// CONSTANTS
-const TInt KBTNAutolockEnabled = 1;
-
-// The following definitions are used to implement checking of connection/pairing
-// request frequency
-
-// if a new connection is made quicker than CONNECT_ADD_TIME after the old one, 
-// then the saved time is added with CONNECT_ADD_TIME.
-#define CONNECT_ADD_TIME TTimeIntervalSeconds(10)
-
-// if the saved time is later than now+DENY_THRESHOLD, start rejecting incoming connections
-// from unpaired devices.
-#define DENY_THRESHOLD	 TTimeIntervalSeconds(30)
-
-// if the user denies incoming connection the saved time goes this much in the future.
-#define REJECT_ADD_TIME TTimeIntervalSeconds(31)
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CBTNotifierBase
-// C++ default constructor can NOT contain any code, that
-// might leave. Sets the AOs priority and puts
-// itself to the active scheduler stack.
-// ----------------------------------------------------------
-//
-CBTNotifierBase::CBTNotifierBase() 
-    {
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::ConstructL
-// Symbian 2nd phase constructor can leave.
-// Create registry object and open resource file.
-// ----------------------------------------------------------
-//
-void CBTNotifierBase::ConstructL()
-    {
-	// Sets up TLS, must be done before FeatureManager is used.
-	FeatureManager::InitializeLibL();
-	iIsCoverUI = ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) ) 
-                    ? ETrue : EFalse; 	
-	// Frees the TLS. Must be done after FeatureManager is used.
-    FeatureManager::UnInitializeLib(); 
-
-    iBTEngSettings = CBTEngSettings::NewL();
-    iDevMan = CBTEngDevMan::NewL( this );
-    iNotifUiUtil = CBTNotifUIUtil::NewL( iIsCoverUI );
-    }
-
-// ----------------------------------------------------------
-// Destructor.
-// ----------------------------------------------------------
-//
-CBTNotifierBase::~CBTNotifierBase()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::~CBTNotifierBase()"));    
-    Cancel();
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::~CBTNotifierBase() -- Done"));    
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::Release
-// Release itself. Call to destructor.
-// ----------------------------------------------------------
-//
-void CBTNotifierBase::Release()
-    {
-    delete this;
-    }
-
-
-// ----------------------------------------------------------
-// CBTNotifierBase::Info
-// Return registered information.
-// ----------------------------------------------------------
-//
-CBTNotifierBase::TNotifierInfo CBTNotifierBase::Info() const
-    {
-    return iInfo;
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::StartL
-// Synchronic notifier launch. Does nothing here.
-// ----------------------------------------------------------
-//
-TPtrC8 CBTNotifierBase::StartL(const TDesC8& /*aBuffer*/)
-    {
-    TPtrC8 ret(KNullDesC8);
-    return (ret);
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::StartL
-// Asynchronic notifier launch.
-// ----------------------------------------------------------
-//
-void CBTNotifierBase::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
-    {
-    if( !iNotifUiUtil )
-        {
-        iNotifUiUtil = CBTNotifUIUtil::NewL( iIsCoverUI );    
-        }
-    
-    TRAPD(err, GetParamsL(aBuffer, aReplySlot, aMessage));
-    if (err)
-        {
-        CompleteMessage(err);
-        }
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::Cancel
-// Cancelling method.
-// ----------------------------------------------------------
-//
-void CBTNotifierBase::Cancel()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::Cancel()"));    
-
-    delete iNotifUiUtil;
-    iNotifUiUtil = NULL;
-    
-	delete iBTEngSettings;
-    iBTEngSettings = NULL;
-
-    delete iDevMan;
-    iDevMan = NULL;
-    
-    delete iDevice;
-    iDevice = NULL;
-    
-    if (iDeviceArray)
-        {
-        iDeviceArray->ResetAndDestroy();
-        delete iDeviceArray;
-        iDeviceArray = NULL;
-        }
-        
-	CompleteMessage(KErrCancel);        
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::UpdateL
-// Notifier update. Not supported.
-// ----------------------------------------------------------
-//
-TPtrC8 CBTNotifierBase::UpdateL(const TDesC8& /*aBuffer*/)
-    {
-    TPtrC8 ret(KNullDesC8);
-    return (ret);
-    }
-
-
-// ----------------------------------------------------------
-// CBTNotifierBase::AutoLockOnL
-// ----------------------------------------------------------
-//
-TBool CBTNotifierBase::AutoLockOnL()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::AutoLockOnL()"));
-
-    TBool result = EFalse;
-    TInt status = KBTNAutolockEnabled;
-    
-    // Connecting and initialization:
-	CRepository* repository = CRepository::NewL(KCRUidSecuritySettings);
-		
-	repository->Get(KSettingsAutolockStatus, status);
-		
-	// Closing connection:
-	delete repository;
-		
-    if ( status == KBTNAutolockEnabled )
-        {
-        result = ETrue;
-        }
-
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::AutoLockOnL() completed with %d"), result ));
-
-    return result;
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CheckAndSetPowerOnL
-// The note or query to be shown depends on two SharedData flags
-// ----------------------------------------------------------
-//
-TBool CBTNotifierBase::CheckAndSetPowerOnL()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::CheckAndSetPowerOnL()"));
-
-	TBTPowerStateValue powerState( EBTPowerOff );
-    // Get current power status
-    //
-    User::LeaveIfError( iBTEngSettings->GetPowerState( powerState ) );
-
-    // If power is off, turn it on
-    //
-    if ( powerState == EBTPowerOff )
-        {
-        TInt offlineModeOff( 1 );    // possible values are 0 and 1
-        TInt activationEnabled( 0 ); // possible values are 0 and 1
-        
-        // Offline mode on?
-        CRepository* repository = CRepository::NewL(KCRUidCoreApplicationUIs);
-        repository->Get(KCoreAppUIsNetworkConnectionAllowed, offlineModeOff);
-        delete repository;
-        
-        // BT Activation enabled?
-        repository = CRepository::NewL(KCRUidBluetoothEngine);
-        repository->Get(KBTEnabledInOffline, activationEnabled);
-        delete repository;
-        
-        // Choose user interaction
-        //
-        if ( !offlineModeOff && !activationEnabled )
-            {
-            // Show user that feature is disabled:
-            iNotifUiUtil->ShowInfoNoteL( R_BT_OFFLINE_DISABLED, ECmdShowBtOfflineDisableNote );
-            return EFalse; // Bluetooth can't be set on.
-            }
-        else
-            {
-            // Choose query
-            //
-            TInt keypress( 0 );	
-            if ( offlineModeOff )
-                {
-                keypress = iNotifUiUtil->ShowQueryL( KErrNone, R_BT_POWER_IS_OFF_QUERY, ECmdShowBtIsOffDlg );
-                }
-            else
-                {
-                keypress = iNotifUiUtil->ShowQueryL( KErrNone, R_BT_ACTIVATE_IN_OFFLINE_QUERY, 
-                        ECmdShowBtActivateInOfflineDlg );
-				}
-
-            if( keypress )  // User answered YES
-                { 
-                //Check if the local name has been set. If not ask user to set name
-                
-				TBool ok = IsLocalNameModifiedL();
-    			if( !ok )
-    				{
-      				ok = AskLocalBTNameQueryL();
-    				}
-               if ( ok )
-			       {  
-                	ok = ( iBTEngSettings->SetPowerState( EBTPowerOn ) ) ? EFalse : ETrue;
-                	}
-                return ok;
-                }
-            else // User has cancelled the dialog
-                {
-                FLOG(_L("[BTNOTIF]\t CBTNotifierBase::CheckAndSetPowerOnL(), dialog canceled"));
-                return EFalse;
-                }                    
-            }
-        }
-    return ETrue;
-    }
-    
-// ----------------------------------------------------------
-// CBTNotifierBase::AskLocalBTNameQueryL()
-// ----------------------------------------------------------
-//
-TBool CBTNotifierBase::AskLocalBTNameQueryL()
-    {
-	FLOG(_L("[BTNOTIF]\t CBTNotifierBase::AskLocalBTNameQueryL() >>"));
-	
-	TBTDeviceName tempNameBuffer;
-    // Cut the excess part of the name away. The query can handle only 
-    // KBTUIMaxNameLength characters.
-    //
-    if( tempNameBuffer.Length() > KBTUIMaxNameLength )
-     {
-     tempNameBuffer.SetLength( KBTUIMaxNameLength );
-     }
-
-    //Get default name if given by e.g. phone product
-    (void) RProperty::Get( KPropertyUidBluetoothCategory, 
-                           KPropertyKeyBluetoothGetDeviceName, tempNameBuffer );
-    
-    if( !tempNameBuffer.Length() )
-        {
-        (void) RProperty::Get( KPropertyUidBluetoothCategory, 
-                KPropertyKeyBluetoothGetDeviceName, tempNameBuffer );
-        }
-    
-    if( !tempNameBuffer.Length() )
-        {
-        RBTRegServ btRegServ;
-        RBTLocalDevice btReg;
-        TBTLocalDevice localDev;
-
-        TInt err = btRegServ.Connect();
-        if( !err )
-            {
-            err = btReg.Open( btRegServ );
-            } 
-        if( !err )
-            {
-            // Read the BT local name from BT Registry.
-            err = btReg.Get( localDev );
-            }
-        if( !err )
-            {
-            // The error can be > 0 if there are unconverted characters.
-            err = CnvUtfConverter::ConvertToUnicodeFromUtf8( tempNameBuffer, localDev.DeviceName() );
-            }
-        btReg.Close();
-        btRegServ.Close();
-        }
-
-    TInt keypress = iNotifUiUtil->ShowTextInputQueryL( tempNameBuffer, 
-            R_BT_ENTER_LOCAL_NAME_QUERY, ECmdBTnotifUnavailable );
-    
-    if( keypress )  // User has accepted the dialog
-        {
-        AknTextUtils::StripCharacters(tempNameBuffer,  KAknStripListControlChars);
-        tempNameBuffer.TrimAll();   // Remove extra spaces
-        // If name was full of invalid chars, it becomes empty after above cleanup. 
-        if( tempNameBuffer.Length() ) 
-            {
-            TInt err = iBTEngSettings->SetLocalName( tempNameBuffer );
-            FLOG(_L("[BTNOTIF]\t CBTNotifierBase::AskLocalBTNameQueryL() <<"));
-            return (err) ? EFalse : ETrue;    
-            }
-        else
-            {
-            FLOG(_L("[BTNOTIF]\t CBTNotifierBase::AskLocalBTNameQueryL() << failed"));
-            return EFalse;
-            }
-        }
-    else
-        {
-        FLOG(_L("[BTNOTIF]\t CBTNotifierBase::AskLocalBTNameQueryL() << cancelled"));
-        return EFalse;
-        }
-    }
-
-// ---------------------------------------------------------------------------------
-// CBTNotifierBase::IsExistingConnectionToAudioL
-// Check if there is any existing connection to audio profiles from the same device
-// ---------------------------------------------------------------------------------
-TBool CBTNotifierBase::IsExistingConnectionToAudioL( const TBTDevAddr& aDevAddr )
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::IsExistingConnectionToAudioL()"));
-    CBTEngConnMan* connMan = CBTEngConnMan::NewL();
-    TBTEngConnectionStatus conntatus( EBTEngNotConnected );
-    (void) connMan->IsConnected(aDevAddr,conntatus);      
-    delete connMan;
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::IsExistingConnectionToAudioL() complete"));
-    return ( conntatus==EBTEngConnected || conntatus==EBTEngConnecting );
-    }
-
-// ---------------------------------------------------------------------------
-// CBTNotifierBase::IsLocalNameModified
-// Checks from central repository whether the Bluetooth friendly name 
-// has been modified .
-// ---------------------------------------------------------------------------
-//
-TBool CBTNotifierBase::IsLocalNameModifiedL()
-	{
-	FLOG(_L("[BTNOTIF]\t CBTNotifierBase::IsLocalNameModified()"));   
-    CRepository* cenRep = CRepository::NewL( KCRUidBTEngPrivateSettings );
-    TInt val( EBTLocalNameDefault );
-    (void) cenRep->Get( KBTLocalNameChanged, val );
-    delete cenRep;
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::IsLocalNameModified() complete"));
-    return val == EBTLocalNameSet;
-    }
-
-
-void CBTNotifierBase::GetDeviceFromRegL(const TBTDevAddr& aAddr)
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::GetDeviceFromRegL"));
-    __ASSERT_DEBUG(iDevice, BTNOTIF_PANIC(EiDeviceNullWhenCallingGetDeviceFromRegL));
-
-    TBTRegistrySearch mySearch;
-    mySearch.FindAddress( aAddr );
-    iDeviceArray = new (ELeave) CBTDeviceArray(1);
-    if( !iDevMan )
-        {
-        iDevMan = CBTEngDevMan::NewL( this );    
-        }
-    TInt err = iDevMan->GetDevices( mySearch, iDeviceArray );
-    if(err)
-        {
-        FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::GetDeviceFromRegL iDevMan->GetDevices error = %d"), err));
-        DoHandleGetDevicesCompleteL(err, NULL);
-        }
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::GetDeviceFromRegL done"));
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::QueryBlockDeviceL
-// Opens a query that returns wether or not user wants the device blocked
-// ----------------------------------------------------------
-void CBTNotifierBase::QueryBlockDeviceL()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::QueryBlockDeviceL()"));
-    __ASSERT_DEBUG( iNotifUiUtil->IsQueryReleased(), User::Panic( _L("CBTNotifierBase - iYesNoDlg not released!"), KErrAlreadyExists ) );
-    
-    TBTDeviceName bName;
-    BtNotifNameUtils::GetDeviceDisplayName(bName, iDevice);
-
-    HBufC* header= StringLoader::LoadLC( R_BT_BLOCK_DEVICE_HEADER );
-
-    TInt resId = IsUserAwarePaired( iDevice->AsNamelessDevice() ) ? 
-        R_BT_BLOCK_PAIRED_DEVICE_NOHELP : R_BT_BLOCK_DEVICE_NOHELP;
-	
-    RBuf stringholder;
-    stringholder.CleanupClosePushL();
-    BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, resId, bName, 0 );
-
-	TInt keypress = iNotifUiUtil->ShowMessageQueryL( stringholder, *header, 
-	        R_BT_GENERIC_MESSAGE_QUERY, CAknQueryDialog::EConfirmationTone );
-    
-    CleanupStack::PopAndDestroy(&stringholder);                   
-    CleanupStack::PopAndDestroy(header);  
-
-    if( keypress )// user replied "Yes"
-        {
-        DoBlockDevice();
-        }
-    else  // user replied "No" 
-        {
-        CompleteMessage(KErrCancel);        
-        } 
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::QueryBlockDeviceL() complete"));   
-    }
-
-void CBTNotifierBase::DoBlockDevice()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::DoBlockDevice()"));
-    TBTDeviceSecurity deviceSecurity = iDevice->GlobalSecurity();
-    deviceSecurity.SetBanned(ETrue);
-    deviceSecurity.SetNoAuthenticate(EFalse);
-    deviceSecurity.SetNoAuthorise(EFalse);
-    iDevice->SetGlobalSecurity(deviceSecurity);
-    iDevice->DeleteLinkKey();
- 
-    iBTRegistryQueryState = ESetDeviceBlocked;
-    TInt err = KErrNone;
-    if( !iDevMan )
-        {
-        TRAP(err, iDevMan = CBTEngDevMan::NewL( this ));    
-        }
-    if( !err )
-        {
-        err = iDevMan->ModifyDevice( *iDevice );
-        }
-    if( err )
-        {
-        // if error, complete message, otherwise waiting for devman callback
-        CompleteMessage(err); 
-        }
-    }
-
-void CBTNotifierBase::ChangeAuthorizeState( TBool aTrust )
-    {
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::ChangeAuthorizeState()"));   
-    TBTDeviceSecurity sec = iDevice->GlobalSecurity();
-    sec.SetBanned(EFalse);
-    sec.SetNoAuthorise( ( aTrust ) ? ETrue : EFalse ) ;
-    iDevice->SetGlobalSecurity(sec);
- 
-    iBTRegistryQueryState = ESetDeviceAuthorizeState;
-    TInt err = KErrNone;
-    if( !iDevMan )
-        {    
-        TRAP(err, iDevMan = CBTEngDevMan::NewL( this ));
-        }
-    if( !err )
-        {
-        err = iDevMan->ModifyDevice( *iDevice );
-        }
-    if( err )
-        {
-        // if error, complete message, otherwise waiting for devman callback        
-        CompleteMessage(err); 
-        TBTNotifLockPublish::DeleteNotifLocks( 
-                EBTNotiferLockPairedDeviceSetting, iDevice->BDAddr() );
-        }
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CheckAndHandleQueryIntervalL
-// ----------------------------------------------------------
-//
-void CBTNotifierBase::CheckAndHandleQueryIntervalL()
-    {
-    FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval start." ) );
-    TBool res = CheckQueryInterval();
-    if( res )
-        {
-        FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval check on/off query status." ) );
-        // Check if we're already showing Turn BT off query
-        TInt queryValue=EBTQueryOff;
-        RProperty::Get( KPSUidBluetoothEnginePrivateCategory, KBTTurnBTOffQueryOn, queryValue );
-        if( queryValue==EBTQueryOff )
-            {
-            FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval asking to turn BT off." ) );
-            RProperty::Set( KPSUidBluetoothEnginePrivateCategory, KBTTurnBTOffQueryOn, EBTQueryOn );
-            TInt keypress = iNotifUiUtil->ShowQueryL( KErrNone, R_BT_TURN_BT_OFF_NOTE, ECmdBTnotifUnavailable );
-            RProperty::Set( KPSUidBluetoothEnginePrivateCategory, KBTTurnBTOffQueryOn, EBTQueryOff );
-            if( keypress )  // User has accepted the dialog
-                {
-                FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval turning BT off." ) );
-                (void) iBTEngSettings->SetPowerState( EBTPowerOff );
-                CompleteMessage( KErrAccessDenied );
-                }
-            }
-        }
-    FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckAndHandleQueryIntervalL done." ) );
-    }
-
-void CBTNotifierBase::DoHandleGetDevicesCompleteL( TInt aErr, CBTDeviceArray* aDeviceArray)
-    {
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::DoHandleGetDevicesCompleteL(%d)"), aErr ));
-    TBTDeviceName devName;
-    if (!aErr && aDeviceArray && aDeviceArray->Count())
-        {
-        // Reassign so that we won't lose the device name as it is
-        // needed if registry doesn't have the name for this device yet:
-        CBTDevice* temp = iDevice;
-        CleanupStack::PushL(temp);
-        // Taking the object returned by registry so that iDevice have
-        // all the up-to-date information except device name.
-        iDevice = aDeviceArray->At(0);
-        aDeviceArray->Delete( 0 );
-        // we show user the device name from registry if it is available;
-        // Otherwise, the name passed in by the notifier request shall be 
-        // used.
-        if( ( !iDevice->IsValidDeviceName() || 
-              !iDevice->DeviceName().Length() ) && 
-            temp->IsValidDeviceName() )
-            {
-            // We are using a stored device name, which will
-            // already have been processed
-            iDevice->SetDeviceNameL( temp->DeviceName() );
-            }
-        CleanupStack::PopAndDestroy(temp);
-        }
-    BtNotifNameUtils::GetDeviceName(devName, iDevice);   
-    
-    // It is possible that iDevice hasn't got a name so far. Use the default BT name
-    // got from GetDeviceName().
-    if ( !iDevice->IsValidDeviceName() || !iDevice->DeviceName().Length() )
-        {
-        BtNotifNameUtils::SetDeviceNameL(devName, *iDevice);
-        }
-    HandleGetDeviceCompletedL( iDevice ); 
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CompleteMessage
-// ----------------------------------------------------------
-//	
-void CBTNotifierBase::CompleteMessage(TInt aErr)
-    {	   
-	if( !iMessage.IsNull() )
-	    {
-	    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::CompleteMessage(%d)"), aErr ));
-	    iMessage.Complete( aErr );
-	    }
-	}
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CompleteMessage
-// ----------------------------------------------------------
-//	
-void CBTNotifierBase::CompleteMessage(TInt aValueToReplySlot, TInt aErr)
-    {
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::CompleteMessage(%d, %d)"), 
-            aValueToReplySlot, aErr ) );
-    CompleteMessage(TPckgBuf<TInt>( aValueToReplySlot ), aErr);
-	}
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CompleteMessage
-// ----------------------------------------------------------
-//	
-void CBTNotifierBase::CompleteMessage(const TDesC8& aDesToReplySlot, TInt aErr)
-    {	   
-	if( !iMessage.IsNull() )
-	    {
-	    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::CompleteMessage(TDesC8&, %d)"), aErr ) );
-	    if ( !aErr )
-	        {
-	        aErr = iMessage.Write( iReplySlot, aDesToReplySlot );
-	        }
-	    iMessage.Complete( aErr );
-	    }
-	}
-
-#ifdef __SERIES60_HELP    
-//-------------------------------------------------------------
-// CBTNotifierBase::LaunchHelp
-//--------------------------------------------------------------
-TInt CBTNotifierBase::LaunchHelp(TAny * tCoeHelpContext )
-	{	
-	TCoeHelpContext hc;
-	
-	if( tCoeHelpContext==NULL)
-		hc = TCoeHelpContext(KUidBTUI,KBT_HLP_BLOCKED);
-	else
-		hc = *static_cast<TCoeHelpContext*>(tCoeHelpContext);
-		 
-		CArrayFix< TCoeHelpContext >* array = new CArrayFixFlat< TCoeHelpContext >(1);
-	TRAPD(err,
-		{
-		CleanupStack::PushL(array);
-		array->AppendL(hc);		
-		HlpLauncher::LaunchHelpApplicationL( CCoeEnv::Static()->WsSession() , array );
-    	CleanupStack::Pop(array);
-		});
-
-    // the array is not deleted, since deleting it will result
-    // to E32User-CBase 3. It is assumed that HlpLancher is taking care of it.
-    // however this has not been documented.
-    return err;
-	}
-#endif
-
-void CBTNotifierBase::HandleGetDevicesComplete( TInt aErr, CBTDeviceArray* aDeviceArray)
-    {
-    TRAP_IGNORE(DoHandleGetDevicesCompleteL(aErr, aDeviceArray));
-    }
-
-void CBTNotifierBase::HandleDevManComplete(TInt aErr)
-    {
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTNotifierBase::HandleDevManComplete()  aErr = %d"), aErr ));
-    
-    switch (iBTRegistryQueryState)
-        {
-        case ESetDeviceBlocked:
-            {
-            // Blocking device was demanded by user after the user
-            // rejected incoming pairing or connect request. The message
-            // to be completed here is the original pair or authorization request
-            // which has been rejected by the user.
-            CompleteMessage(KErrCancel);
-            }
-        case ESetDeviceAuthorizeState:
-            {
-            TBTNotifLockPublish::DeleteNotifLocks( 
-                    EBTNotiferLockPairedDeviceSetting, iDevice->BDAddr() );
-            CompleteMessage(aErr);
-            break;
-            }
-        }
-    FLOG(_L("[BTNOTIF]\t CBTNotifierBase::HandleDevManComplete() Complete"));           
-    }
-
-void CBTNotifierBase::HandleGetDeviceCompletedL(const CBTDevice* /*aDev*/)
-    {    
-    }
-
-// ----------------------------------------------------------
-// CBTNotifierBase::CheckQueryInterval
-// ----------------------------------------------------------
-//
-TBool CBTNotifierBase::CheckQueryInterval()
-    {
-    FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval()" ) );
-    TBool result = EFalse;
-    // Check if the user gets too many queries within a certain time interval from unpaired devices
-    if( iDevice && !iDevice->IsValidLinkKey() )
-        {
-        TBuf8<32> buf;
-        TTime now;
-        now.UniversalTime();    // Get current time
-        TInt64 writeTime = ( now + REJECT_ADD_TIME ).Int64();
-
-        // get last connection time
-        TInt err = RProperty::Get( KPSUidBluetoothEnginePrivateCategory, KBTConnectionTimeStamp, buf );
-        if( !err )
-            {
-            FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval Checking query interval." ) );
-            // Parse recorded time stamp
-            TInt64 num(0);
-            TLex8 lex;
-            lex = buf;
-            lex.Val( num );
-            TTime lastTime( num );
-
-            // detection of clock adjusment
-            TInt timetravel = 2 * REJECT_ADD_TIME.Int();
-            if( lastTime > now + TTimeIntervalSeconds(timetravel) )
-                {
-                FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval  time travel detection." ) );
-                lastTime = now;
-                }
-            // new request too quickly, move booked time
-            if( lastTime + CONNECT_ADD_TIME > now )
-                {
-                FLOG( _L( "[BTNOTIF]\t CBTAuthNotifier::IsDosAttack  CONNECT_ADD_TIME added." ) );
-                writeTime = ( lastTime + CONNECT_ADD_TIME ).Int64();
-                }
-
-            FTRACE( FPrint( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval() lastTime = %d" ), lastTime.Int64() ) );
-            FTRACE( FPrint( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval now + treshold: %d" ), (now + DENY_THRESHOLD).Int64() ) );
-            // If threshold is exceeded, ask user to turn Bluetooth OFF
-            if( lastTime > now + DENY_THRESHOLD )
-                {
-                FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval threshold exceeded!." ) );
-                result = ETrue;
-                }
-            }
-        else
-            {
-            FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval setting connection timestamp first time." ) );
-            }
-        // Write back the timestamp
-        buf.Num( writeTime );
-        FTRACE( FPrint( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval updating timestamp: %d." ), writeTime ) );
-        RProperty::Set( KPSUidBluetoothEnginePrivateCategory,KBTConnectionTimeStamp, buf );
-        } // end of query interval check
-    FLOG( _L( "[BTNOTIF]\t CBTNotifierBase::CheckQueryInterval() complete" ) );
-    return result;
-    }
-// End of File