diff --git a/internal/platform/implementation/linux/wifi_hotspot.cc b/internal/platform/implementation/linux/wifi_hotspot.cc index 3d4ce648..f448dd92 100644 --- a/internal/platform/implementation/linux/wifi_hotspot.cc +++ b/internal/platform/implementation/linux/wifi_hotspot.cc @@ -269,8 +269,8 @@ bool NetworkManagerWifiHotspotMedium::ConnectWifiHotspot( } bool NetworkManagerWifiHotspotMedium::DisconnectWifiHotspot() { - if (!WifiHotspotActive()) { - NEARBY_LOGS(ERROR) << __func__ << ": WiFi hotspot is not active"; + if (!ConnectedToWifi()) { + NEARBY_LOGS(ERROR) << __func__ << ": Not connected to a WiFi hotspot"; return false; } @@ -299,5 +299,15 @@ bool NetworkManagerWifiHotspotMedium::WifiHotspotActive() { } } +bool NetworkManagerWifiHotspotMedium::ConnectedToWifi() { + try { + auto mode = wireless_device_->Mode(); + return mode == 2; // NM_802_11_MODE_INFRA + } catch (const sdbus::Error &e) { + DBUS_LOG_PROPERTY_GET_ERROR(wireless_device_, "Mode", e); + return false; + } +} + } // namespace linux } // namespace nearby diff --git a/internal/platform/implementation/linux/wifi_hotspot.h b/internal/platform/implementation/linux/wifi_hotspot.h index ec0af3bb..18daf48f 100644 --- a/internal/platform/implementation/linux/wifi_hotspot.h +++ b/internal/platform/implementation/linux/wifi_hotspot.h @@ -47,6 +47,7 @@ public: private: bool WifiHotspotActive(); + bool ConnectedToWifi(); sdbus::IConnection &system_bus_; std::unique_ptr wireless_device_;