Merge branch 'master' into release to roll forward to cl/343785060.

This commit is contained in:
hai007
2020-11-23 23:16:34 -08:00
27 changed files with 500 additions and 756 deletions
+30 -25
View File
@@ -21,10 +21,8 @@ namespace location {
namespace nearby {
bool WifiLanMedium::StartAdvertising(const std::string& service_id,
const std::string& service_info_name,
const std::string& endpoint_info_name) {
return impl_->StartAdvertising(service_id, service_info_name,
endpoint_info_name);
const NsdServiceInfo& nsd_service_info) {
return impl_->StartAdvertising(service_id, nsd_service_info);
}
bool WifiLanMedium::StopAdvertising(const std::string& service_id) {
@@ -42,40 +40,46 @@ bool WifiLanMedium::StartDiscovery(const std::string& service_id,
service_id,
{
.service_discovered_cb =
[this](api::WifiLanService& service,
[this](api::WifiLanService& wifi_lan_service,
const std::string& service_id) {
MutexLock lock(&mutex_);
auto pair = services_.emplace(
&service, absl::make_unique<ServiceDiscoveryInfo>());
&wifi_lan_service,
absl::make_unique<ServiceDiscoveryInfo>());
auto& context = *pair.first->second;
if (!pair.second) {
NEARBY_LOG(INFO,
"Discovering (again) service=%p, impl=%p, "
"service_info_name=%s",
&context.service, &service,
service.GetServiceName().c_str());
&context.wifi_lan_service, &wifi_lan_service,
wifi_lan_service.GetServiceInfo()
.GetServiceInfoName()
.c_str());
} else {
context.service = WifiLanService(&service);
NEARBY_LOG(INFO,
"Discovering service=%p, impl=%p, "
"service_info_name=%s",
&context.service, &service,
service.GetServiceName().c_str());
context.wifi_lan_service = WifiLanService(&wifi_lan_service);
NEARBY_LOG(
INFO,
"Discovering wifi_lan_service=%p, service_info_name=%s",
&wifi_lan_service,
wifi_lan_service.GetServiceInfo()
.GetServiceInfoName()
.c_str());
}
discovered_service_callback_.service_discovered_cb(
context.service, service_id);
context.wifi_lan_service, service_id);
},
.service_lost_cb =
[this](api::WifiLanService& service,
[this](api::WifiLanService& wifi_lan_service,
const std::string& service_id) {
MutexLock lock(&mutex_);
if (services_.empty()) return;
auto context = services_.find(&service);
auto context = services_.find(&wifi_lan_service);
if (context == services_.end()) return;
NEARBY_LOG(INFO, "Removing service=%p, impl=%p",
&(context->second->service), &service);
NEARBY_LOG(INFO, "Removing wifi_lan_service=%p, impl=%p",
&(context->second->wifi_lan_service),
&wifi_lan_service);
discovered_service_callback_.service_lost_cb(
context->second->service, service_id);
context->second->wifi_lan_service, service_id);
},
});
}
@@ -131,18 +135,19 @@ bool WifiLanMedium::StopAcceptingConnections(const std::string& service_id) {
return impl_->StopAcceptingConnections(service_id);
}
WifiLanSocket WifiLanMedium::Connect(WifiLanService& service,
WifiLanSocket WifiLanMedium::Connect(WifiLanService& wifi_lan_service,
const std::string& service_id) {
NEARBY_LOG(
INFO,
"WifiLanMedium::Connect: service=%p [impl=%p, service_info_name=%s]",
&service, &service.GetImpl(), service.GetServiceName().c_str());
return WifiLanSocket(impl_->Connect(service.GetImpl(), service_id));
&wifi_lan_service, &wifi_lan_service.GetImpl(),
wifi_lan_service.GetServiceInfo().GetServiceInfoName().c_str());
return WifiLanSocket(impl_->Connect(wifi_lan_service.GetImpl(), service_id));
}
WifiLanService WifiLanMedium::FindRemoteService(const std::string& ip_address,
WifiLanService WifiLanMedium::GetRemoteService(const std::string& ip_address,
int port) {
return WifiLanService(impl_->FindRemoteService(ip_address, port));
return WifiLanService(impl_->GetRemoteService(ip_address, port));
}
std::pair<std::string, int> WifiLanMedium::GetServiceAddress(
+8 -13
View File
@@ -19,6 +19,7 @@
#include "platform/api/wifi_lan.h"
#include "platform/base/byte_array.h"
#include "platform/base/input_stream.h"
#include "platform/base/nsd_service_info.h"
#include "platform/base/output_stream.h"
#include "platform/public/mutex.h"
#include "absl/container/flat_hash_map.h"
@@ -26,8 +27,7 @@
namespace location {
namespace nearby {
// Opaque wrapper over a WifiLan service which contains packed
// |WifiLanServiceInfo| string name and the TXT Record.
// Opaque wrapper over a WifiLan service which contains |NsdServiceInfo|.
class WifiLanService final {
public:
WifiLanService() = default;
@@ -36,12 +36,7 @@ class WifiLanService final {
explicit WifiLanService(api::WifiLanService* service) : impl_(service) {}
~WifiLanService() = default;
std::string GetServiceName() const { return impl_->GetServiceName(); }
std::string GetTxtRecord(const std::string& key) const {
return impl_->GetTxtRecord(key);
}
NsdServiceInfo GetServiceInfo() const { return impl_->GetServiceInfo(); }
api::WifiLanService& GetImpl() { return *impl_; }
bool IsValid() const { return impl_ != nullptr; }
@@ -119,7 +114,7 @@ class WifiLanMedium final {
};
struct ServiceDiscoveryInfo {
WifiLanService service;
WifiLanService wifi_lan_service;
};
struct AcceptedConnectionCallback {
@@ -135,8 +130,7 @@ class WifiLanMedium final {
~WifiLanMedium() = default;
bool StartAdvertising(const std::string& service_id,
const std::string& service_info_name,
const std::string& endpoint_info_name);
const NsdServiceInfo& nsd_service_info);
bool StopAdvertising(const std::string& service_id);
// Returns true once the WifiLan discovery has been initiated.
@@ -156,13 +150,14 @@ class WifiLanMedium final {
// Returns a new WifiLanSocket. On Success, WifiLanSocket::IsValid()
// returns true.
WifiLanSocket Connect(WifiLanService& service, const std::string& service_id);
WifiLanSocket Connect(WifiLanService& wifi_lan_service,
const std::string& service_id);
bool IsValid() const { return impl_ != nullptr; }
api::WifiLanMedium& GetImpl() { return *impl_; }
WifiLanService FindRemoteService(const std::string& ip_address, int port);
WifiLanService GetRemoteService(const std::string& ip_address, int port);
std::pair<std::string, int> GetServiceAddress(const std::string& service_id);
+29 -8
View File
@@ -30,6 +30,7 @@ namespace {
constexpr absl::string_view kServiceID{"com.google.location.nearby.apps.test"};
constexpr absl::string_view kServiceInfoName{"Simulated service info name"};
constexpr absl::string_view kEndpointName{"Simulated endpoint name"};
constexpr absl::string_view kEndpointInfoKey{"n"};
class WifiLanMediumTest : public ::testing::Test {
protected:
@@ -64,7 +65,11 @@ TEST_F(WifiLanMediumTest, CanStartAdvertising) {
std::string endpoint_info_name{kEndpointName};
CountDownLatch found_latch(1);
wifi_a.StartAdvertising(service_id, service_info_name, endpoint_info_name);
NsdServiceInfo nsd_service_info;
nsd_service_info.SetServiceInfoName(service_info_name);
nsd_service_info.SetTxtRecord(std::string(kEndpointInfoKey),
endpoint_info_name);
wifi_a.StartAdvertising(service_id, nsd_service_info);
EXPECT_TRUE(wifi_b.StartDiscovery(
service_id, DiscoveredServiceCallback{
@@ -103,8 +108,12 @@ TEST_F(WifiLanMediumTest, CanStartDiscovery) {
lost_latch.CountDown();
},
});
EXPECT_TRUE(wifi_b.StartAdvertising(service_id, service_info_name,
endpoint_info_name));
NsdServiceInfo nsd_service_info;
nsd_service_info.SetServiceInfoName(service_info_name);
nsd_service_info.SetTxtRecord(std::string(kEndpointInfoKey),
endpoint_info_name);
EXPECT_TRUE(wifi_b.StartAdvertising(service_id, nsd_service_info));
EXPECT_TRUE(found_latch.Await(absl::Milliseconds(1000)).result());
EXPECT_TRUE(wifi_b.StopAdvertising(service_id));
EXPECT_TRUE(lost_latch.Await(absl::Milliseconds(1000)).result());
@@ -135,8 +144,13 @@ TEST_F(WifiLanMediumTest, CanStopDiscovery) {
lost_latch.CountDown();
},
});
EXPECT_TRUE(wifi_b.StartAdvertising(service_id, service_info_name,
endpoint_info_name));
NsdServiceInfo nsd_service_info;
nsd_service_info.SetServiceInfoName(service_info_name);
nsd_service_info.SetTxtRecord(std::string(kEndpointInfoKey),
endpoint_info_name);
EXPECT_TRUE(wifi_b.StartAdvertising(service_id, nsd_service_info));
EXPECT_TRUE(found_latch.Await(absl::Milliseconds(1000)).result());
EXPECT_TRUE(wifi_a.StopDiscovery(service_id));
EXPECT_TRUE(wifi_b.StopAdvertising(service_id));
@@ -161,13 +175,20 @@ TEST_F(WifiLanMediumTest, CanStartAcceptingConnectionsAndConnect) {
.service_discovered_cb =
[&found_latch, &discovered_service](
WifiLanService& service, const std::string& service_id) {
NEARBY_LOG(INFO, "Service discovered: %s, %p",
service.GetServiceName().c_str(), &service);
NEARBY_LOG(
INFO, "Service discovered: %s, %p",
service.GetServiceInfo().GetServiceInfoName().c_str(),
&service);
discovered_service = &service;
found_latch.CountDown();
},
});
wifi_b.StartAdvertising(service_id, service_info_name, endpoint_info_name);
NsdServiceInfo nsd_service_info;
nsd_service_info.SetServiceInfoName(service_info_name);
nsd_service_info.SetTxtRecord(std::string(kEndpointInfoKey),
endpoint_info_name);
wifi_b.StartAdvertising(service_id, nsd_service_info);
wifi_b.StartAcceptingConnections(
service_id,
AcceptedConnectionCallback{