Loading system/gd/security/facade.cc +19 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,13 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public return ::grpc::Status::OK; } ::grpc::Status FetchEnforceSecurityPolicyEvents( ::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter<EnforceSecurityPolicyMsg>* writer) override { return enforce_security_policy_events_.RunLoop(context, writer); } ::grpc::Status EnforceSecurityPolicy( ::grpc::ServerContext* context, const SecurityPolicyMessage* request, Loading @@ -176,6 +183,10 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public ASSERT(hci::Address::FromString(request->address().address().address(), peer)); hci::AddressType peer_type = static_cast<hci::AddressType>(request->address().type()); hci::AddressWithType peer_with_type(peer, peer_type); l2cap::classic::SecurityEnforcementInterface::ResultCallback callback = security_handler_->BindOnceOn(this, &SecurityModuleFacadeService::EnforceSecurityPolicyEvent); security_module_->GetFacadeConfigurationApi()->EnforceSecurityPolicy( peer_with_type, static_cast<l2cap::classic::SecurityPolicy>(request->policy()), std::move(callback)); return ::grpc::Status::OK; } Loading Loading @@ -272,11 +283,19 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public bond_events_.OnIncomingEvent(bond_failed); } void EnforceSecurityPolicyEvent(bool result) { EnforceSecurityPolicyMsg msg; msg.set_result(result); enforce_security_policy_events_.OnIncomingEvent(msg); } private: SecurityModule* security_module_; ::bluetooth::os::Handler* security_handler_; ::bluetooth::grpc::GrpcEventQueue<UiMsg> ui_events_{"UI events"}; ::bluetooth::grpc::GrpcEventQueue<BondMsg> bond_events_{"Bond events"}; ::bluetooth::grpc::GrpcEventQueue<EnforceSecurityPolicyMsg> enforce_security_policy_events_{ "Enforce Security Policy Events"}; uint32_t unique_id{1}; std::map<uint32_t, common::OnceCallback<void(bool)>> user_yes_no_callbacks_; std::map<uint32_t, common::OnceCallback<void(uint32_t)>> user_passkey_callbacks_; Loading system/gd/security/facade.proto +5 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ service SecurityModuleFacade { rpc FetchUiEvents(google.protobuf.Empty) returns (stream UiMsg) {} rpc FetchBondEvents(google.protobuf.Empty) returns (stream BondMsg) {} rpc EnforceSecurityPolicy(SecurityPolicyMessage) returns (google.protobuf.Empty) {} rpc FetchEnforceSecurityPolicyEvents(google.protobuf.Empty) returns (stream EnforceSecurityPolicyMsg) {} } enum UiMsgType { Loading Loading @@ -119,3 +120,7 @@ message SecurityPolicyMessage { facade.BluetoothAddressWithType address = 1; l2cap.classic.ClassicSecurityPolicy policy = 2; } message EnforceSecurityPolicyMsg { bool result = 1; } system/gd/security/facade_configuration_api.cc +15 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ */ #include "facade_configuration_api.h" #include "common/bind.h" #include "l2cap/classic/security_enforcement_interface.h" #include "os/log.h" namespace bluetooth { Loading Loading @@ -44,5 +46,18 @@ void FacadeConfigurationApi::SetLeIoCapability(security::IoCapability io_capabil void FacadeConfigurationApi::SetLeAuthReq(uint8_t auth_req) { security_handler_->CallOn(security_manager_impl_, &internal::SecurityManagerImpl::SetLeAuthReq, auth_req); } void FacadeConfigurationApi::EnforceSecurityPolicy( hci::AddressWithType remote, l2cap::classic::SecurityPolicy policy, l2cap::classic::SecurityEnforcementInterface::ResultCallback callback) { security_handler_->CallOn( security_manager_impl_, &internal::SecurityManagerImpl::EnforceSecurityPolicy, remote, policy, std::move(callback)); } } // namespace security } // namespace bluetooth system/gd/security/facade_configuration_api.h +4 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,10 @@ class FacadeConfigurationApi { void SetIoCapability(hci::IoCapability io_capability); void SetAuthenticationRequirements(hci::AuthenticationRequirements authentication_requirement); void SetOobData(hci::OobDataPresent oob_present); void EnforceSecurityPolicy( hci::AddressWithType remote, l2cap::classic::SecurityPolicy policy, l2cap::classic::SecurityEnforcementInterface::ResultCallback callback); void SetLeIoCapability(security::IoCapability io_capability); void SetLeAuthReq(uint8_t auth_req); Loading Loading
system/gd/security/facade.cc +19 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,13 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public return ::grpc::Status::OK; } ::grpc::Status FetchEnforceSecurityPolicyEvents( ::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter<EnforceSecurityPolicyMsg>* writer) override { return enforce_security_policy_events_.RunLoop(context, writer); } ::grpc::Status EnforceSecurityPolicy( ::grpc::ServerContext* context, const SecurityPolicyMessage* request, Loading @@ -176,6 +183,10 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public ASSERT(hci::Address::FromString(request->address().address().address(), peer)); hci::AddressType peer_type = static_cast<hci::AddressType>(request->address().type()); hci::AddressWithType peer_with_type(peer, peer_type); l2cap::classic::SecurityEnforcementInterface::ResultCallback callback = security_handler_->BindOnceOn(this, &SecurityModuleFacadeService::EnforceSecurityPolicyEvent); security_module_->GetFacadeConfigurationApi()->EnforceSecurityPolicy( peer_with_type, static_cast<l2cap::classic::SecurityPolicy>(request->policy()), std::move(callback)); return ::grpc::Status::OK; } Loading Loading @@ -272,11 +283,19 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public bond_events_.OnIncomingEvent(bond_failed); } void EnforceSecurityPolicyEvent(bool result) { EnforceSecurityPolicyMsg msg; msg.set_result(result); enforce_security_policy_events_.OnIncomingEvent(msg); } private: SecurityModule* security_module_; ::bluetooth::os::Handler* security_handler_; ::bluetooth::grpc::GrpcEventQueue<UiMsg> ui_events_{"UI events"}; ::bluetooth::grpc::GrpcEventQueue<BondMsg> bond_events_{"Bond events"}; ::bluetooth::grpc::GrpcEventQueue<EnforceSecurityPolicyMsg> enforce_security_policy_events_{ "Enforce Security Policy Events"}; uint32_t unique_id{1}; std::map<uint32_t, common::OnceCallback<void(bool)>> user_yes_no_callbacks_; std::map<uint32_t, common::OnceCallback<void(uint32_t)>> user_passkey_callbacks_; Loading
system/gd/security/facade.proto +5 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ service SecurityModuleFacade { rpc FetchUiEvents(google.protobuf.Empty) returns (stream UiMsg) {} rpc FetchBondEvents(google.protobuf.Empty) returns (stream BondMsg) {} rpc EnforceSecurityPolicy(SecurityPolicyMessage) returns (google.protobuf.Empty) {} rpc FetchEnforceSecurityPolicyEvents(google.protobuf.Empty) returns (stream EnforceSecurityPolicyMsg) {} } enum UiMsgType { Loading Loading @@ -119,3 +120,7 @@ message SecurityPolicyMessage { facade.BluetoothAddressWithType address = 1; l2cap.classic.ClassicSecurityPolicy policy = 2; } message EnforceSecurityPolicyMsg { bool result = 1; }
system/gd/security/facade_configuration_api.cc +15 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ */ #include "facade_configuration_api.h" #include "common/bind.h" #include "l2cap/classic/security_enforcement_interface.h" #include "os/log.h" namespace bluetooth { Loading Loading @@ -44,5 +46,18 @@ void FacadeConfigurationApi::SetLeIoCapability(security::IoCapability io_capabil void FacadeConfigurationApi::SetLeAuthReq(uint8_t auth_req) { security_handler_->CallOn(security_manager_impl_, &internal::SecurityManagerImpl::SetLeAuthReq, auth_req); } void FacadeConfigurationApi::EnforceSecurityPolicy( hci::AddressWithType remote, l2cap::classic::SecurityPolicy policy, l2cap::classic::SecurityEnforcementInterface::ResultCallback callback) { security_handler_->CallOn( security_manager_impl_, &internal::SecurityManagerImpl::EnforceSecurityPolicy, remote, policy, std::move(callback)); } } // namespace security } // namespace bluetooth
system/gd/security/facade_configuration_api.h +4 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,10 @@ class FacadeConfigurationApi { void SetIoCapability(hci::IoCapability io_capability); void SetAuthenticationRequirements(hci::AuthenticationRequirements authentication_requirement); void SetOobData(hci::OobDataPresent oob_present); void EnforceSecurityPolicy( hci::AddressWithType remote, l2cap::classic::SecurityPolicy policy, l2cap::classic::SecurityEnforcementInterface::ResultCallback callback); void SetLeIoCapability(security::IoCapability io_capability); void SetLeAuthReq(uint8_t auth_req); Loading