Files
koreader/frontend/ui/networkmgr.lua
NiLuJe 687aba796d Fix networkmgr on Kobo
To avoid potential issues with USBMS.
Namely, make sure CWD doesn't point to the userstore for persitent
processes.
Make sure wpa_supplicant doesn't try to use our own OpenSSL lib, which,
again, is in the userstore area.
Properly kill our dhcp client invocation on when killing WiFi

Also, some related fixes to the startup script:
Properly kill wpa_supplicant & the dhcp client when we kill
wifi before rebooting to nickel.
2015-09-04 23:14:17 +02:00

157 lines
4.8 KiB
Lua

local InfoMessage = require("ui/widget/infomessage")
local ConfirmBox = require("ui/widget/confirmbox")
local UIManager = require("ui/uimanager")
local Device = require("device")
local DEBUG = require("dbg")
local T = require("ffi/util").template
local _ = require("gettext")
local NetworkMgr = {}
local function kindleEnableWifi(toggle)
local lipc = require("liblipclua")
local lipc_handle = nil
if lipc then
lipc_handle = lipc.init("com.github.koreader.networkmgr")
end
if lipc_handle then
lipc_handle:set_int_property("com.lab126.cmd", "wirelessEnable", toggle)
lipc_handle:close()
end
end
local function koboEnableWifi(toggle)
if toggle == 1 then
os.execute("lsmod | grep -q sdio_wifi_pwr || insmod /drivers/$PLATFORM/wifi/sdio_wifi_pwr.ko")
os.execute("lsmod | grep -q dhd || insmod /drivers/$PLATFORM/wifi/dhd.ko")
os.execute("sleep 2")
os.execute("ifconfig eth0 up")
os.execute("wlarm_le -i eth0 up")
os.execute("pidof wpa_supplicant >/dev/null || cd / && env -u LD_LIBRARY_PATH wpa_supplicant -s -i eth0 -c /etc/wpa_supplicant/wpa_supplicant.conf -C /var/run/wpa_supplicant -B")
os.execute("sleep 1")
os.execute("cd / && env -u LD_LIBRARY_PATH /sbin/udhcpc -S -i eth0 -s /etc/udhcpc.d/default.script -t15 -T10 -A3 -b -q >/dev/null 2>&1 &")
else
os.execute("killall udhcpc default.script wpa_supplicant 2>/dev/null")
os.execute("wlarm_le -i eth0 down")
os.execute("ifconfig eth0 down")
os.execute("rmmod -r dhd")
os.execute("rmmod -r sdio_wifi_pwr")
end
end
local function pocketbookEnableWifi(toggle)
os.execute("/ebrmain/bin/netagent " .. (toggle == 1 and "connect" or "disconnect"))
end
function NetworkMgr:turnOnWifi()
if Device:isKindle() then
kindleEnableWifi(1)
elseif Device:isKobo() then
koboEnableWifi(1)
elseif Device:isPocketBook() then
pocketbookEnableWifi(1)
end
end
function NetworkMgr:turnOffWifi()
if Device:isKindle() then
kindleEnableWifi(0)
elseif Device:isKobo() then
koboEnableWifi(0)
elseif Device:isPocketBook() then
pocketbookEnableWifi(0)
end
end
function NetworkMgr:promptWifiOn()
UIManager:show(ConfirmBox:new{
text = _("Do you want to turn on Wifi?"),
ok_callback = function()
self:turnOnWifi()
end,
})
end
function NetworkMgr:promptWifiOff()
UIManager:show(ConfirmBox:new{
text = _("Do you want to turn off Wifi?"),
ok_callback = function()
self:turnOffWifi()
end,
})
end
function NetworkMgr:getWifiStatus()
local socket = require("socket")
return socket.dns.toip("www.example.com") ~= nil
end
function NetworkMgr:setHTTPProxy(proxy)
local http = require("socket.http")
http.PROXY = proxy
if proxy then
G_reader_settings:saveSetting("http_proxy", proxy)
G_reader_settings:saveSetting("http_proxy_enabled", true)
else
G_reader_settings:saveSetting("http_proxy_enabled", false)
end
end
function NetworkMgr:getWifiMenuTable()
return {
text = _("Wifi connection"),
enabled_func = function() return Device:isKindle() or Device:isKobo() end,
checked_func = function() return NetworkMgr:getWifiStatus() end,
callback = function()
if NetworkMgr:getWifiStatus() then
NetworkMgr:promptWifiOff()
else
NetworkMgr:promptWifiOn()
end
end
}
end
function NetworkMgr:getProxyMenuTable()
local proxy_enabled = function()
return G_reader_settings:readSetting("http_proxy_enabled")
end
local proxy = function()
return G_reader_settings:readSetting("http_proxy")
end
return {
text_func = function()
return T(_("HTTP proxy %1"), (proxy_enabled() and proxy() or ""))
end,
checked_func = function() return proxy_enabled() end,
callback = function()
if not proxy_enabled() and proxy() then
NetworkMgr:setHTTPProxy(proxy())
elseif proxy_enabled() then
NetworkMgr:setHTTPProxy(nil)
end
if not proxy() then
UIManager:show(InfoMessage:new{
text = _("Tip:\nLong press on this menu entry to configure HTTP proxy."),
})
end
end,
hold_input = {
title = _("Enter proxy address"),
type = "text",
hint = proxy() or "",
callback = function(input)
if input ~= "" then
NetworkMgr:setHTTPProxy(input)
end
end,
}
}
end
-- set network proxy if global variable NETWORK_PROXY is defined
if NETWORK_PROXY then
NetworkMgr:setHTTPProxy(NETWORK_PROXY)
end
return NetworkMgr