mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 22:56:12 -04:00
Commonize callback construction for discovery.
PiperOrigin-RevId: 546934102
This commit is contained in:
committed by
Copybara-Service
parent
3726589865
commit
eff0e2d3c6
@@ -946,16 +946,7 @@ BasePcpHandler::StartOperationResult P2pClusterPcpHandler::StartDiscoveryImpl(
|
||||
|
||||
if (discovery_options.allowed.wifi_lan) {
|
||||
location::nearby::proto::connections::Medium wifi_lan_medium =
|
||||
StartWifiLanDiscovery(
|
||||
{
|
||||
.service_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::WifiLanServiceDiscoveredHandler,
|
||||
this, client),
|
||||
.service_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::WifiLanServiceLostHandler, this,
|
||||
client),
|
||||
},
|
||||
client, service_id);
|
||||
StartWifiLanDiscovery(client, service_id);
|
||||
if (wifi_lan_medium !=
|
||||
location::nearby::proto::connections::UNKNOWN_MEDIUM) {
|
||||
NEARBY_LOGS(INFO)
|
||||
@@ -967,17 +958,6 @@ BasePcpHandler::StartOperationResult P2pClusterPcpHandler::StartDiscoveryImpl(
|
||||
if (discovery_options.allowed.bluetooth) {
|
||||
location::nearby::proto::connections::Medium bluetooth_medium =
|
||||
StartBluetoothDiscovery(
|
||||
{
|
||||
.device_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BluetoothDeviceDiscoveredHandler,
|
||||
this, client, service_id),
|
||||
.device_name_changed_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BluetoothNameChangedHandler, this,
|
||||
client, service_id),
|
||||
.device_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BluetoothDeviceLostHandler, this,
|
||||
client, service_id),
|
||||
},
|
||||
client, service_id);
|
||||
if (bluetooth_medium !=
|
||||
location::nearby::proto::connections::UNKNOWN_MEDIUM) {
|
||||
@@ -992,14 +972,6 @@ BasePcpHandler::StartOperationResult P2pClusterPcpHandler::StartDiscoveryImpl(
|
||||
config_package_nearby::nearby_connections_feature::kEnableBleV2)) {
|
||||
location::nearby::proto::connections::Medium ble_v2_medium =
|
||||
StartBleV2Scanning(
|
||||
{
|
||||
.peripheral_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BleV2PeripheralDiscoveredHandler,
|
||||
this, client),
|
||||
.peripheral_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BleV2PeripheralLostHandler, this,
|
||||
client),
|
||||
},
|
||||
client, service_id, discovery_options);
|
||||
if (ble_v2_medium !=
|
||||
location::nearby::proto::connections::UNKNOWN_MEDIUM) {
|
||||
@@ -1009,17 +981,8 @@ BasePcpHandler::StartOperationResult P2pClusterPcpHandler::StartDiscoveryImpl(
|
||||
}
|
||||
} else {
|
||||
location::nearby::proto::connections::Medium ble_medium =
|
||||
StartBleScanning(
|
||||
{
|
||||
.peripheral_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BlePeripheralDiscoveredHandler,
|
||||
this, client),
|
||||
.peripheral_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BlePeripheralLostHandler, this,
|
||||
client),
|
||||
},
|
||||
client, service_id,
|
||||
discovery_options.fast_advertisement_service_uuid);
|
||||
StartBleScanning(client, service_id,
|
||||
discovery_options.fast_advertisement_service_uuid);
|
||||
if (ble_medium != location::nearby::proto::connections::UNKNOWN_MEDIUM) {
|
||||
NEARBY_LOGS(INFO)
|
||||
<< "P2pClusterPcpHandler::StartDiscoveryImpl: Ble added.";
|
||||
@@ -1498,11 +1461,20 @@ P2pClusterPcpHandler::StartBluetoothAdvertising(
|
||||
}
|
||||
|
||||
location::nearby::proto::connections::Medium
|
||||
P2pClusterPcpHandler::StartBluetoothDiscovery(
|
||||
BluetoothDiscoveredDeviceCallback callback, ClientProxy* client,
|
||||
const std::string& service_id) {
|
||||
P2pClusterPcpHandler::StartBluetoothDiscovery(ClientProxy* client,
|
||||
const std::string& service_id) {
|
||||
if (bluetooth_radio_.Enable() &&
|
||||
bluetooth_medium_.StartDiscovery(std::move(callback))) {
|
||||
bluetooth_medium_.StartDiscovery({
|
||||
.device_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BluetoothDeviceDiscoveredHandler, this,
|
||||
client, service_id),
|
||||
.device_name_changed_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BluetoothNameChangedHandler, this, client,
|
||||
service_id),
|
||||
.device_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BluetoothDeviceLostHandler, this, client,
|
||||
service_id),
|
||||
})) {
|
||||
NEARBY_LOGS(INFO) << "In StartBluetoothDiscovery(), client="
|
||||
<< client->GetClientId()
|
||||
<< " started scanning for Bluetooth for service_id="
|
||||
@@ -1714,12 +1686,19 @@ P2pClusterPcpHandler::StartBleAdvertising(
|
||||
|
||||
location::nearby::proto::connections::Medium
|
||||
P2pClusterPcpHandler::StartBleScanning(
|
||||
BleDiscoveredPeripheralCallback callback, ClientProxy* client,
|
||||
const std::string& service_id,
|
||||
ClientProxy* client, const std::string& service_id,
|
||||
const std::string& fast_advertisement_service_uuid) {
|
||||
if (bluetooth_radio_.Enable() &&
|
||||
ble_medium_.StartScanning(service_id, fast_advertisement_service_uuid,
|
||||
std::move(callback))) {
|
||||
ble_medium_.StartScanning(
|
||||
service_id, fast_advertisement_service_uuid,
|
||||
{
|
||||
.peripheral_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BlePeripheralDiscoveredHandler, this,
|
||||
client),
|
||||
.peripheral_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BlePeripheralLostHandler, this,
|
||||
client),
|
||||
})) {
|
||||
NEARBY_LOGS(INFO)
|
||||
<< "In StartBleScanning(), client=" << client->GetClientId()
|
||||
<< " started scanning for BLE advertisements for service_id="
|
||||
@@ -1923,13 +1902,21 @@ P2pClusterPcpHandler::StartBleV2Advertising(
|
||||
|
||||
location::nearby::proto::connections::Medium
|
||||
P2pClusterPcpHandler::StartBleV2Scanning(
|
||||
BleV2DiscoveredPeripheralCallback callback, ClientProxy* client,
|
||||
const std::string& service_id, const DiscoveryOptions& discovery_options) {
|
||||
ClientProxy* client, const std::string& service_id,
|
||||
const DiscoveryOptions& discovery_options) {
|
||||
PowerLevel power_level = discovery_options.low_power ? PowerLevel::kLowPower
|
||||
: PowerLevel::kHighPower;
|
||||
if (bluetooth_radio_.Enable() &&
|
||||
ble_v2_medium_.StartScanning(service_id, power_level,
|
||||
std::move(callback))) {
|
||||
ble_v2_medium_.StartScanning(
|
||||
service_id, power_level,
|
||||
{
|
||||
.peripheral_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BleV2PeripheralDiscoveredHandler, this,
|
||||
client),
|
||||
.peripheral_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::BleV2PeripheralLostHandler, this,
|
||||
client),
|
||||
})) {
|
||||
NEARBY_LOGS(INFO)
|
||||
<< "In StartBleScanning(), client=" << client->GetClientId()
|
||||
<< " started scanning for BLE advertisements for service_id="
|
||||
@@ -2086,10 +2073,18 @@ P2pClusterPcpHandler::StartWifiLanAdvertising(
|
||||
}
|
||||
|
||||
location::nearby::proto::connections::Medium
|
||||
P2pClusterPcpHandler::StartWifiLanDiscovery(
|
||||
WifiLanDiscoveredServiceCallback callback, ClientProxy* client,
|
||||
const std::string& service_id) {
|
||||
if (wifi_lan_medium_.StartDiscovery(service_id, std::move(callback))) {
|
||||
P2pClusterPcpHandler::StartWifiLanDiscovery(ClientProxy* client,
|
||||
const std::string& service_id) {
|
||||
if (wifi_lan_medium_.StartDiscovery(
|
||||
service_id,
|
||||
{
|
||||
.service_discovered_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::WifiLanServiceDiscoveredHandler, this,
|
||||
client),
|
||||
.service_lost_cb = absl::bind_front(
|
||||
&P2pClusterPcpHandler::WifiLanServiceLostHandler, this,
|
||||
client),
|
||||
})) {
|
||||
NEARBY_LOGS(INFO) << "In StartWifiLanDiscovery(), client="
|
||||
<< client->GetClientId()
|
||||
<< " started scanning for Wifi devices for service_id="
|
||||
|
||||
@@ -181,8 +181,7 @@ class P2pClusterPcpHandler : public BasePcpHandler {
|
||||
const ByteArray& service_id_hash, const std::string& local_endpoint_id,
|
||||
const ByteArray& local_endpoint_info, WebRtcState web_rtc_state);
|
||||
location::nearby::proto::connections::Medium StartBluetoothDiscovery(
|
||||
BluetoothDiscoveredDeviceCallback callback, ClientProxy* client,
|
||||
const std::string& service_id);
|
||||
ClientProxy* client, const std::string& service_id);
|
||||
BasePcpHandler::ConnectImplResult BluetoothConnectImpl(
|
||||
ClientProxy* client, BluetoothEndpoint* endpoint);
|
||||
|
||||
@@ -207,8 +206,7 @@ class P2pClusterPcpHandler : public BasePcpHandler {
|
||||
const ByteArray& local_endpoint_info,
|
||||
const AdvertisingOptions& advertising_options, WebRtcState web_rtc_state);
|
||||
location::nearby::proto::connections::Medium StartBleScanning(
|
||||
BleDiscoveredPeripheralCallback callback, ClientProxy* client,
|
||||
const std::string& service_id,
|
||||
ClientProxy* client, const std::string& service_id,
|
||||
const std::string& fast_advertisement_service_uuid);
|
||||
BasePcpHandler::ConnectImplResult BleConnectImpl(ClientProxy* client,
|
||||
BleEndpoint* endpoint);
|
||||
@@ -237,8 +235,8 @@ class P2pClusterPcpHandler : public BasePcpHandler {
|
||||
const ByteArray& local_endpoint_info,
|
||||
const AdvertisingOptions& advertising_options, WebRtcState web_rtc_state);
|
||||
location::nearby::proto::connections::Medium StartBleV2Scanning(
|
||||
BleV2DiscoveredPeripheralCallback callback, ClientProxy* client,
|
||||
const std::string& service_id, const DiscoveryOptions& discovery_options);
|
||||
ClientProxy* client, const std::string& service_id,
|
||||
const DiscoveryOptions& discovery_options);
|
||||
BasePcpHandler::ConnectImplResult BleV2ConnectImpl(ClientProxy* client,
|
||||
BleV2Endpoint* endpoint);
|
||||
|
||||
@@ -263,8 +261,7 @@ class P2pClusterPcpHandler : public BasePcpHandler {
|
||||
const std::string& local_endpoint_id,
|
||||
const ByteArray& local_endpoint_info, WebRtcState web_rtc_state);
|
||||
location::nearby::proto::connections::Medium StartWifiLanDiscovery(
|
||||
WifiLanDiscoveredServiceCallback callback, ClientProxy* client,
|
||||
const std::string& service_id);
|
||||
ClientProxy* client, const std::string& service_id);
|
||||
BasePcpHandler::ConnectImplResult WifiLanConnectImpl(
|
||||
ClientProxy* client, WifiLanEndpoint* endpoint);
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
#include "protobuf-matchers/protocol-buffer-matchers.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "absl/time/time.h"
|
||||
#include "connections/advertising_options.h"
|
||||
#include "connections/implementation/bluetooth_device_name.h"
|
||||
#include "connections/implementation/bwu_manager.h"
|
||||
#include "connections/implementation/flags/nearby_connections_feature_flags.h"
|
||||
#include "connections/implementation/injected_bluetooth_device_store.h"
|
||||
@@ -333,6 +335,88 @@ TEST_P(P2pClusterPcpHandlerTest, CanDiscover) {
|
||||
env_.Stop();
|
||||
}
|
||||
|
||||
TEST_P(P2pClusterPcpHandlerTest, CanBluetoothDiscoverChangeName) {
|
||||
env_.Start();
|
||||
std::string endpoint_name{"endpoint_name"};
|
||||
Mediums mediums_a;
|
||||
Mediums mediums_b;
|
||||
EndpointChannelManager ecm_a;
|
||||
EndpointChannelManager ecm_b;
|
||||
EndpointManager em_a(&ecm_a);
|
||||
EndpointManager em_b(&ecm_b);
|
||||
BwuManager bwu_a(mediums_a, em_a, ecm_a, {}, {});
|
||||
BwuManager bwu_b(mediums_b, em_b, ecm_b, {}, {});
|
||||
InjectedBluetoothDeviceStore ibds_a;
|
||||
InjectedBluetoothDeviceStore ibds_b;
|
||||
P2pClusterPcpHandler handler_a(&mediums_a, &em_a, &ecm_a, &bwu_a, ibds_a);
|
||||
P2pClusterPcpHandler handler_b(&mediums_b, &em_b, &ecm_b, &bwu_b, ibds_b);
|
||||
// For the first time we find the device with the old name.
|
||||
CountDownLatch first_found_latch(1);
|
||||
// For the second time we "find" the device with the new name.
|
||||
CountDownLatch second_found_latch(1);
|
||||
// For when the name is changed.
|
||||
CountDownLatch lost_latch(1);
|
||||
AdvertisingOptions advertising_options = {
|
||||
{
|
||||
Strategy::kP2pCluster,
|
||||
BooleanMediumSelector{
|
||||
.bluetooth = true,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
DiscoveryOptions discovery_options = {
|
||||
{
|
||||
Strategy::kP2pCluster,
|
||||
BooleanMediumSelector{
|
||||
.bluetooth = true,
|
||||
},
|
||||
},
|
||||
};
|
||||
bool first = false;
|
||||
EXPECT_EQ(
|
||||
handler_a.StartAdvertising(&client_a_, service_id_, advertising_options,
|
||||
{.endpoint_info = ByteArray{endpoint_name}}),
|
||||
Status{Status::kSuccess});
|
||||
EXPECT_EQ(handler_b.StartDiscovery(
|
||||
&client_b_, service_id_, discovery_options,
|
||||
{
|
||||
.endpoint_found_cb =
|
||||
[&](const std::string& endpoint_id,
|
||||
const ByteArray& endpoint_info,
|
||||
const std::string& service_id) {
|
||||
NEARBY_LOG(INFO, "Device discovered: id=%s",
|
||||
endpoint_id.c_str());
|
||||
if (!first) {
|
||||
first_found_latch.CountDown();
|
||||
first = true;
|
||||
} else {
|
||||
second_found_latch.CountDown();
|
||||
}
|
||||
},
|
||||
.endpoint_lost_cb =
|
||||
[&](const std::string& id) {
|
||||
NEARBY_LOG(INFO, "Device lost: id=%s", id.c_str());
|
||||
lost_latch.CountDown();
|
||||
},
|
||||
}),
|
||||
Status{Status::kSuccess});
|
||||
ASSERT_TRUE(mediums_a.GetBluetoothRadio().IsAdapterValid());
|
||||
BluetoothDeviceName name(
|
||||
mediums_a.GetBluetoothRadio().GetBluetoothAdapter().GetName());
|
||||
BluetoothDeviceName new_name(name.GetVersion(), name.GetPcp(),
|
||||
name.GetEndpointId(), name.GetServiceIdHash(),
|
||||
ByteArray("BT Device A"), name.GetUwbAddress(),
|
||||
name.GetWebRtcState());
|
||||
EXPECT_TRUE(first_found_latch.Await().Ok());
|
||||
mediums_a.GetBluetoothRadio().GetBluetoothAdapter().SetName(
|
||||
std::string(new_name));
|
||||
EXPECT_TRUE(second_found_latch.Await().Ok());
|
||||
EXPECT_TRUE(lost_latch.Await().Ok());
|
||||
handler_b.StopDiscovery(&client_b_);
|
||||
env_.Stop();
|
||||
}
|
||||
|
||||
TEST_P(P2pClusterPcpHandlerTest, CanConnect) {
|
||||
env_.Start();
|
||||
std::string endpoint_name_a{"endpoint_name"};
|
||||
|
||||
@@ -63,6 +63,9 @@ bool BluetoothClassicMedium::StartDiscovery(DiscoveryCallback callback) {
|
||||
.device_name_changed_cb =
|
||||
[this](api::BluetoothDevice& device) {
|
||||
MutexLock lock(&mutex_);
|
||||
// If the device is not already in devices_, we should not be able
|
||||
// to change its name.
|
||||
if (devices_.find(&device) == devices_.end()) return;
|
||||
auto& context = *devices_[&device];
|
||||
NEARBY_LOG(INFO, "Renaming device=%p, impl=%p", &context.device,
|
||||
&device);
|
||||
|
||||
Reference in New Issue
Block a user