Don't pass wifi pointer into libWeave if interface is not available BUG: 24111116 Change-Id: I4f3f54348574c63656904d34928ff90bc93823ec Reviewed-on: https://weave-review.googlesource.com/1116 Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc index b0b7f14..c6450b4 100644 --- a/libweave/examples/ubuntu/main.cc +++ b/libweave/examples/ubuntu/main.cc
@@ -47,8 +47,11 @@ opts.disable_privet = false; opts.disable_security = false; opts.enable_ping = true; - device->Start(opts, &config_store, &task_runner, &http_client, &network, - &mdns, &http_server, &network, &bluetooth); + device->Start( + opts, &config_store, &task_runner, &http_client, &network, &mdns, + &http_server, + weave::examples::NetworkImpl::HasWifiCapability() ? &network : nullptr, + &bluetooth); task_runner.Run();
diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc index 2414d7d..56e9544 100644 --- a/libweave/examples/ubuntu/network_manager.cc +++ b/libweave/examples/ubuntu/network_manager.cc
@@ -200,6 +200,10 @@ hostapd_started_ = false; } +bool NetworkImpl::HasWifiCapability() { + return std::system("nmcli dev | grep ^wlan0") == 0; +} + void NetworkImpl::OpenSslSocket( const std::string& host, uint16_t port,
diff --git a/libweave/examples/ubuntu/network_manager.h b/libweave/examples/ubuntu/network_manager.h index c7f2480..4e1b6bd 100644 --- a/libweave/examples/ubuntu/network_manager.h +++ b/libweave/examples/ubuntu/network_manager.h
@@ -45,6 +45,8 @@ void EnableAccessPoint(const std::string& ssid) override; void DisableAccessPoint() override; + static bool HasWifiCapability(); + private: void TryToConnect(const std::string& ssid, const std::string& passphrase,