From 1fbdc1f19d5beb923ba9352be454691762b10205 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Tue, 2 Apr 2024 18:01:31 +0100 Subject: [PATCH] NetworkMgr: Limit the hasDefaultRoute check in isOnline to PocketBooks It's not necessary on other platforms. To be more precise, it would be necessary on Kobo as well, but there's a different workaround in place: https://github.com/koreader/koreader/pull/6424/files#diff-be863601c59a2d6607af6b04b3be2392ec4494df6d25dae48250fae57b737f61R216-R224 --- frontend/device/pocketbook/device.lua | 8 ++++++++ frontend/ui/network/manager.lua | 22 ++++++++++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/frontend/device/pocketbook/device.lua b/frontend/device/pocketbook/device.lua index 3f212d878..289321cc1 100644 --- a/frontend/device/pocketbook/device.lua +++ b/frontend/device/pocketbook/device.lua @@ -387,6 +387,14 @@ function PocketBook:initNetworkManager(NetworkMgr) return band(inkview.QueryNetwork(), C.NET_CONNECTED) ~= 0 end NetworkMgr.isWifiOn = NetworkMgr.isConnected + + function NetworkMgr:isOnline() + -- Fail early if we don't even have a default route, otherwise we're + -- unlikely to be online and canResolveHostnames would never succeed + -- again because PocketBook's glibc parses /etc/resolv.conf on first + -- use only. See https://sourceware.org/bugzilla/show_bug.cgi?id=984 + return NetworkMgr:hasDefaultRoute() and NetworkMgr:canResolveHostnames() + end end function PocketBook:getSoftwareVersion() diff --git a/frontend/ui/network/manager.lua b/frontend/ui/network/manager.lua index 802e6d1db..161a4ba8f 100644 --- a/frontend/ui/network/manager.lua +++ b/frontend/ui/network/manager.lua @@ -307,6 +307,15 @@ function NetworkMgr:hasDefaultRoute() return ret ~= nil end +function NetworkMgr:canResolveHostnames() + local socket = require("socket") + -- Microsoft uses `dns.msftncsi.com` for Windows, see + -- for + -- more information. They also check whether + -- returns `Microsoft NCSI`. + return socket.dns.toip("dns.msftncsi.com") ~= nil +end + -- Wrappers around turnOnWifi & turnOffWifi with proper Event signaling function NetworkMgr:enableWifi(wifi_cb, connectivity_cb, connectivity_widget, interactive) local status = self:requestToTurnOnWifi(wifi_cb, interactive) @@ -565,18 +574,7 @@ function NetworkMgr:isOnline() return true end - -- Fail early if we don't even have a default route. - -- On PocketBook devices, if the first call to socket.dns.toip(…) fails, it never succeeds again. - if not self:hasDefaultRoute() then - return false - end - - local socket = require("socket") - -- Microsoft uses `dns.msftncsi.com` for Windows, see - -- for - -- more information. They also check whether - -- returns `Microsoft NCSI`. - return socket.dns.toip("dns.msftncsi.com") ~= nil + return self:canResolveHostnames() end -- Update our cached network status