diff -r 8a27654f7b62 -r 20fda83a6398 bluetooth/btstack/secman/btaccessrequester.cpp --- a/bluetooth/btstack/secman/btaccessrequester.cpp Fri Mar 12 15:49:00 2010 +0200 +++ b/bluetooth/btstack/secman/btaccessrequester.cpp Mon Mar 15 12:44:59 2010 +0200 @@ -79,7 +79,7 @@ , iPrefetchQueueLink(this) , iAuthenticationInProgress(EFalse) , iAccessType(aAccessType) - , iDedicatedBondingNotAvailable(EFalse) + , iRemoteIndicatedNoBonding(EFalse) , iCurrentState(EBTUninitialised) { LOG_FUNC @@ -508,7 +508,7 @@ THCIAuthenticationRequirement authReq = event->AuthenticationRequirements(); if (iAccessType == EDedicatedBonding && (authReq == EMitmReqNoBonding || authReq == EMitmNotReqNoBonding)) { - iDedicatedBondingNotAvailable = ETrue; + iRemoteIndicatedNoBonding = ETrue; } } @@ -592,15 +592,6 @@ TBTSecEventUserConfirmationRequest* event = TBTSecEventUserConfirmationRequest::Cast(&aEvent); __ASSERT_ALWAYS(event, User::Panic(KBTSecPanic, EBTSecBadStateMachineEvent)); - // Ignore the user confirmation request, we're unable to bond - // (dedicated bonding not available at both ends of the link) - // A negative reply is also sent in secman.cpp - if (UnableToBond()) - { - CompleteRequest(KErrRemoteDeviceIndicatedNoBonding); - return; - } - // start guard timer... iTimer->Start(); } @@ -705,6 +696,12 @@ else if(aResult == EBTSecManAccessGranted) { LOG(_L8("\tACCESS GRANTED")); + if (RemoteIndicatedNoBondingToDedicatedBonding()) + { + // We allow the device to bond, but tell theUI layer so it can delete the link key if it wants to + aResult = KErrRemoteDeviceIndicatedNoBonding; + LOG(_L8("\t... but remote indicated no bonding")); + } } else { @@ -1004,10 +1001,10 @@ return encryptionRequired; } -TBool CBTAccessRequester::UnableToBond() const +TBool CBTAccessRequester::RemoteIndicatedNoBondingToDedicatedBonding() const { LOG_FUNC - return (iAccessType == EDedicatedBonding && iDedicatedBondingNotAvailable); + return (iAccessType == EDedicatedBonding && iRemoteIndicatedNoBonding); } TAccessType CBTAccessRequester::AccessType() const