--- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifserviceauthorizer.cpp Tue Aug 31 15:25:10 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +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: class for prompting user to authorize a service
-* connection request.
-*
-*/
-
-#include <hb/hbcore/hbsymbianvariant.h>
-#include <btengconnman.h>
-#include "btnotifserviceauthorizer.h"
-#include "btnotifsecuritymanager.h"
-#include "bluetoothtrace.h"
-#include "btnotifclientserver.h"
-#include "bluetoothnotification.h"
-#include "btnotifconnectiontracker.h"
-#include "btnotificationmanager.h"
-#include "btnotifserver.h"
-#include "btnotifutil.h"
-
-//
-// SDP UUID Constants - Short form
-// Taken from Bluetooth Profile specification v1.1
-// These are used when registering the service to
-// local SDP database and when searching the service
-// information from remote device.
-const TUint KBTSdpDun = 0x1103;
-const TUint KBTSdpGenericTelephony = 0x1204;
-const TUint KBTSdpFax = 0x1111;
-const TUint KBTSdpObjectPush = 0x1105;
-const TUint KBTSdpFileTransfer = 0x1106;
-const TUint KBTSdpHeadSet = 0x1108;
-const TUint KBTSdpGenericNetworking = 0x1201;
-const TUint KBTSdpBasicImaging = 0x111b;
-
-
-CBTNotifServiceAuthorizer* CBTNotifServiceAuthorizer::NewL(
- CBTNotifSecurityManager& aParent)
- {
- CBTNotifServiceAuthorizer* me = new (ELeave) CBTNotifServiceAuthorizer(aParent);
- CleanupStack::PushL(me);
- me->ConstructL();
- CleanupStack::Pop(me);
- return me;
- }
-
-CBTNotifServiceAuthorizer::~CBTNotifServiceAuthorizer()
- {
- iParams.Close();
- if( iNotification )
- {
- // Clear the notification callback, we cannot receive them anymore.
- iNotification->RemoveObserver();
- iNotification->Close(); // Also dequeues the notification from the queue.
- iNotification = NULL;
- }
- if ( !iNotifierMessage.IsNull() )
- {
- iNotifierMessage.Complete( KErrServerTerminated );
- }
- }
-
-CBTNotifServiceAuthorizer::CBTNotifServiceAuthorizer(
- CBTNotifSecurityManager& aParent)
-:iParent(aParent)
- {
- }
-
-void CBTNotifServiceAuthorizer::ConstructL()
- {
- }
-
-void CBTNotifServiceAuthorizer::StartNotifierL(const RMessage2& aMessage)
- {
- if (!iNotifierMessage.IsNull())
- {
- if(aMessage.Function() == EBTNotifCancelNotifier)
- {
- TInt err = iNotification->Close();
- iNotifierMessage.Complete(KErrCancel);
- aMessage.Complete(err);
- return;
- }
- BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,"[BTNotif]:We are busy");
- User::Leave(KErrServerBusy );
- }
-
- iParams.ReAllocL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) );
- aMessage.ReadL( EBTNotifSrvParamSlot, iParams );
-
- TBTAuthorisationParams params;
- TPckgC<TBTAuthorisationParams> paramsPckg( params );
- paramsPckg.Set( iParams );
-
- iServiceId = paramsPckg().iUid.iUid;
-
- const CBtDevExtension* dev = NULL;
- dev = iParent.BTDevRepository().Device(paramsPckg().iBDAddr);
-
- if(dev && dev->Device().GlobalSecurity().Banned() )
- {
- // If the device is banned, service connection from
- // this device is not allowed:
- BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,"[BTNotif]:Device is banned");
- aMessage.Complete( KErrCancel);
- return;
- }
-
- if(dev && dev->Device().GlobalSecurity().NoAuthorise())
- {
- // If the device is a trusted one, no need to pop up query messages.
- TPckgBuf<TBool> answer;
- answer() = ETrue;
- aMessage.Write(EBTNotifSrvReplySlot, answer);
- aMessage.Complete(KErrNone);
- return;
- }
-
- // User must namually authorize this request.
- // Get needed info for the dialog:
- iPairedDevice = (dev == NULL ) ? EFalse : dev->IsUserAwareBonded();
- iDeviceClass = (dev == NULL ) ? 0 : dev->Device().DeviceClass().DeviceClass();
- TBTNotifUtil::GetDeviceUiNameL(iCurrentDeviceName,
- dev, paramsPckg().iName, paramsPckg().iBDAddr );
-
- TBool autoAuthorize;
- PrepareNotificationL(autoAuthorize,
- TBluetoothDialogParams::EUserAuthorization,
- EAuthorization, iPairedDevice);
- if ( autoAuthorize )
- {
- TPckgBuf<TBool> answer;
- answer() = ETrue;
- aMessage.Write(EBTNotifSrvReplySlot, answer);
- aMessage.Complete(KErrNone);
- }
- else
- {
- iNotification->ShowL();
- // we do not save the message until all leavable functions have executed successfully.
- // This makes sure the iNotifierMessage has a valid handle.
- iNotifierMessage = aMessage;
- }
- }
-
-void CBTNotifServiceAuthorizer::MBRDataReceived( CHbSymbianVariantMap& aData )
- {
- // "actionResult" will be true if the user clicks 'Yes' on the dialog and false, if he/she clicks 'No'
- // "iCheckBoxState" will be set to true of the checkbox is checked, else false.
- if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0)
- {
- TBTAuthorisationParams params;
- TPckgC<TBTAuthorisationParams> paramsPckg(params);
- paramsPckg.Set(iParams);
-
- TPckgBuf<TBool> answer;
- TInt val = *(static_cast<TInt*>(aData.Get(_L("actionResult"))->Data()));
- if(val)
- {
- answer() = ETrue;
- if(iCheckBoxState)
- {
- // Set the device "Trusted" property
- iParent.TrustDevice(paramsPckg().iBDAddr);
- }
- }
- else
- {
- answer() = EFalse;
- if(iCheckBoxState)
- {
- // If the device is paried, unpair it as well.
- if(iPairedDevice)
- {
- iParent.UnpairDevice(paramsPckg().iBDAddr);
- }
-
- //Set the device "Blocked" property
- iParent.BlockDevice(paramsPckg().iBDAddr,ETrue);
- }
- }
- if ( !iNotifierMessage.IsNull() )
- {
- iNotifierMessage.Write(EBTNotifSrvReplySlot, answer);
- iNotifierMessage.Complete(KErrNone);
- }
- }
- else if(aData.Keys().MdcaPoint(0).Compare(_L("checkBoxState")) == 0)
- {
- iCheckBoxState = *(static_cast<TInt*>(aData.Get(_L("checkBoxState"))->Data()));
- }
- }
-
-void CBTNotifServiceAuthorizer::MBRNotificationClosed( TInt aError, const TDesC8& aData )
- {
- (void) aError;
- (void) aData;
- iNotification->RemoveObserver();
- iNotification = NULL;
- }
-
-void CBTNotifServiceAuthorizer::PrepareNotificationL(TBool& aAutoAuthorize,
- TBluetoothDialogParams::TBTDialogType aType,
- TBTDialogResourceId aResourceId, TBool aPaired)
- {
- iNotification = iParent.ConnectionTracker().NotificationManager()->GetNotification();
- User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory
- iNotification->SetObserver( this );
- iNotification->SetNotificationType( aType, aResourceId );
- TInt err = KErrNone;
- aAutoAuthorize = EFalse;
-
- //Set the dialog title based on the service IDs
- switch(iServiceId)
- {
- case KBTSdpObjectPush:
- case KBTSdpBasicImaging:
- {
- if(aPaired)
- {
- err = iNotification->SetData( TBluetoothDialogParams::EDialogTitle, TBluetoothDialogParams::EReceiveFromPairedDevice);
- // In case of receiving a msg from a paired deivce, the checkbox is checked by default.
- iCheckBoxState = ETrue;
- User::LeaveIfError(err);
- }
- else
- {
- err = iNotification->SetData( TBluetoothDialogParams::EDialogTitle, TBluetoothDialogParams::EReceive);
- iCheckBoxState = EFalse;
- User::LeaveIfError(err);
- }
- }
- break;
-
- case KBTSdpFax:
- case KBTSdpDun:
- case KBTSdpFileTransfer:
- case KBTSdpHeadSet:
- case KBTSdpGenericTelephony:
- case KBTSdpGenericNetworking:
- {
- err = iNotification->SetData( TBluetoothDialogParams::EDialogTitle, TBluetoothDialogParams::EConnect);
- // In case of an incoming connection, the checkbox is checked by default.
- iCheckBoxState = ETrue;
- User::LeaveIfError(err);
- }
- break;
-
- default:
- {
- TBTAuthorisationParams params;
- TPckgC<TBTAuthorisationParams> paramsPckg(params);
- paramsPckg.Set(iParams);
-
- // In this case, if there already exists a connection to an audio device, then we simply accept
- // the incoming connection without querying the user.
- // If there is no existing connection, then we pop up a query message.
- if(IsExistingConnectionToAudioL(paramsPckg().iBDAddr))
- {
- aAutoAuthorize = ETrue;
- return;
- }
- else
- {
- err = iNotification->SetData( TBluetoothDialogParams::EDialogTitle, TBluetoothDialogParams::EConnect);
- // In case of an incoming connection, the checkbox is checked by default.
- iCheckBoxState = ETrue;
- User::LeaveIfError(err);
- }
- }
- break;
- }
-
- //Add the device name
- err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceName, iCurrentDeviceName );
- User::LeaveIfError(err);
- //Add the device class
- err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceClass, iDeviceClass );
- User::LeaveIfError(err);
-
- }
-
-TBool CBTNotifServiceAuthorizer::IsExistingConnectionToAudioL(const TBTDevAddr& aDevAddr)
- {
- CBTEngConnMan* connMan = CBTEngConnMan::NewL();
- TBTEngConnectionStatus conntatus(EBTEngNotConnected);
- (void) connMan->IsConnected(aDevAddr,conntatus);
- delete connMan;
- return (conntatus==EBTEngConnected || conntatus==EBTEngConnecting);
- }
-