bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.cpp
changeset 67 16e4b9007960
parent 57 5ebadcda06cb
equal deleted inserted replaced
65:001a94c71129 67:16e4b9007960
    30         BtSettingModel* settingModel, 
    30         BtSettingModel* settingModel, 
    31         BtDeviceModel* deviceModel, 
    31         BtDeviceModel* deviceModel, 
    32         QObject *parent) :
    32         QObject *parent) :
    33     BtAbstractDelegate(settingModel, deviceModel, parent), mBtEngDevMan(0),
    33     BtAbstractDelegate(settingModel, deviceModel, parent), mBtEngDevMan(0),
    34     mDisconnectDelegate(0), mBtEngAddr(0), mRegDevArray(0), mOperation(0), 
    34     mDisconnectDelegate(0), mBtEngAddr(0), mRegDevArray(0), mOperation(0), 
    35     mDevice(0),mNewDev(0), mActiveHandling(false),mAddingBlockedDev(false)
    35     mDevice(0),mNewDev(0), mActiveHandling(false),mAddingDevToRegistry(false)
    36 {
    36 {
    37     BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); 
    37     BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); 
    38     mRegDevArray = new CBTDeviceArray(1);
    38     mRegDevArray = new CBTDeviceArray(1);
    39     BTUI_ASSERT_X( mRegDevArray, "BtDelegateDevSecurity::BtDelegateDevSecurity()", 
    39     BTUI_ASSERT_X( mRegDevArray, "BtDelegateDevSecurity::BtDelegateDevSecurity()", 
    40             "can't allocate regdevarray");
    40             "can't allocate regdevarray");
   185 
   185 
   186 void BtDelegateDevSecurity::cancel()
   186 void BtDelegateDevSecurity::cancel()
   187 {
   187 {
   188     BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); 
   188     BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); 
   189     if ( mActiveHandling ) {
   189     if ( mActiveHandling ) {
   190         mAddingBlockedDev = false;
       
   191         emitCommandComplete(KErrNone);
   190         emitCommandComplete(KErrNone);
   192     }
   191     }
   193     BOstraceFunctionExit1( DUMMY_DEVLIST, this );
   192     BOstraceFunctionExit1( DUMMY_DEVLIST, this );
   194 }
   193 }
   195 
   194 
   211     if ( !mActiveHandling ) {
   210     if ( !mActiveHandling ) {
   212         BOstraceFunctionExit1( DUMMY_DEVLIST, this );
   211         BOstraceFunctionExit1( DUMMY_DEVLIST, this );
   213         return;
   212         return;
   214     }
   213     }
   215     if ( !err ) {
   214     if ( !err ) {
   216         if ( mAddingBlockedDev ) {
   215         if ( mAddingDevToRegistry ) {
   217             // blocked a device which was not in the registry originally
   216             // blocked a device which was not in the registry originally
   218             mAddingBlockedDev = false;
   217             mAddingDevToRegistry = false;
   219             delete mNewDev;
   218             delete mNewDev;
   220             mNewDev = 0;
   219             mNewDev = 0;
   221         }
   220         }
   222         else if ( mOperation == BtBlock || mOperation == BtUnpair) {  
   221         else if ( mOperation == BtBlock || mOperation == BtUnpair) {  
   223             // disconnect after blocking/unpairing if device is connected;
   222             // disconnect after blocking/unpairing if device is connected;
   269             default:
   268             default:
   270                 // wrong parameter
   269                 // wrong parameter
   271                 emitCommandComplete( KErrArgument );
   270                 emitCommandComplete( KErrArgument );
   272             }
   271             }
   273         }
   272         }
   274         else if ( err == KErrNotFound && mOperation == BtBlock) {  // device not in registry, need to add it
   273         else if ( err == KErrNotFound && ((mOperation == BtBlock) ||
   275             mAddingBlockedDev = true;
   274                 (mOperation == BtAuthorize))) {  // device not in registry, need to add it
       
   275             mAddingDevToRegistry = true;
   276             TRAP( err, {
   276             TRAP( err, {
   277                     mNewDev = CBTDevice::NewL( mBtEngAddr );
   277                     mNewDev = CBTDevice::NewL( mBtEngAddr );
   278             });
   278             });
   279             if ( !err ) {
   279             if ( !err ) {
   280                 // get needed info about device from model, e.g. name, cod
   280                 // get needed info about device from model, e.g. name, cod
   291                 TRAP( err, mNewDev->SetDeviceNameL( BTDeviceNameConverter::ToUTF8L( buf ) ));
   291                 TRAP( err, mNewDev->SetDeviceNameL( BTDeviceNameConverter::ToUTF8L( buf ) ));
   292                 if( !err ) {
   292                 if( !err ) {
   293                     int cod = (index.data(BtDeviceModel::CoDRole)).toInt();
   293                     int cod = (index.data(BtDeviceModel::CoDRole)).toInt();
   294                     mNewDev->SetDeviceClass(cod);
   294                     mNewDev->SetDeviceClass(cod);
   295                     TBTDeviceSecurity security = mNewDev->GlobalSecurity();
   295                     TBTDeviceSecurity security = mNewDev->GlobalSecurity();
   296                     security.SetBanned( ETrue );
   296                     if (mOperation == BtBlock) {
   297                     security.SetNoAuthorise( EFalse ); // set trust status to false
   297                         security.SetBanned( ETrue );
       
   298                         security.SetNoAuthorise( EFalse ); // set trust status to false
       
   299                         mNewDev->DeleteLinkKey();
       
   300                         mNewDev->SetPaired(EFalse);
       
   301                     } else {  // BtAuthorize
       
   302                         security.SetNoAuthorise( ETrue ); // set trust status to true
       
   303                         security.SetBanned( EFalse );
       
   304                     }
   298                     mNewDev->SetGlobalSecurity( security );
   305                     mNewDev->SetGlobalSecurity( security );
   299                     mNewDev->DeleteLinkKey();
       
   300                     mNewDev->SetPaired(EFalse);
       
   301                     err = mBtEngDevMan->AddDevice( *mNewDev );  // see callback HandleDevManComplete()
   306                     err = mBtEngDevMan->AddDevice( *mNewDev );  // see callback HandleDevManComplete()
   302                 }
   307                 }
   303             }
   308             }
   304         }
   309         }
   305         if (err) {
   310         if (err) {
   306             mAddingBlockedDev = false;
       
   307             emitCommandComplete( err );
   311             emitCommandComplete( err );
   308         }
   312         }
   309     }
   313     }
   310     BOstraceFunctionExit1( DUMMY_DEVLIST, this );
   314     BOstraceFunctionExit1( DUMMY_DEVLIST, this );
   311 }
   315 }
   314 {
   318 {
   315     BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error );  
   319     BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error );  
   316     // no dialogs here since stack provides "unpaired to %1" dialog
   320     // no dialogs here since stack provides "unpaired to %1" dialog
   317     // and failures are not reported
   321     // and failures are not reported
   318     mActiveHandling = false;
   322     mActiveHandling = false;
   319     mAddingBlockedDev = false;
   323     mAddingDevToRegistry = false;
   320     if ( mNewDev ) {
   324     if ( mNewDev ) {
   321         delete mNewDev;
   325         delete mNewDev;
   322         mNewDev = 0;
   326         mNewDev = 0;
   323     }
   327     }
   324     emit delegateCompleted(error, this);
   328     emit delegateCompleted(error, this);