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