0
0
mirror of https://github.com/Doodle3D/doodle3d-firmware.git synced 2024-12-22 11:03:48 +01:00

Fix problem where 'wlan0' device disappears (code now falls back to 'radio0'); fix symlink path for captive portal www; minor fixes.

This commit is contained in:
Wouter R 2013-07-08 19:02:20 +02:00
parent b861f43e11
commit e2127797de
6 changed files with 47 additions and 18 deletions

View File

@ -1,19 +1,21 @@
--[[ --[[
TODO: TODO:
- document REST API (mention rq IDs and endpoint information, list endpoints+args+CRUD type, unknown values are empty fields) - document REST API (mention rq IDs and endpoint information, list endpoints+args+CRUD type, unknown values are empty fields)
(describe fail/error difference: fail is valid rq..could not comply, while error is invalid rq _or_ system error)
- use a slightly more descriptive success/error definition (e.g. errortype=system/missing-arg/generic) - use a slightly more descriptive success/error definition (e.g. errortype=system/missing-arg/generic)
- how to handle requests which need a restart of uhttpd? (e.g. network/openap) - how to handle requests which need a restart of uhttpd? (e.g. network/openap)
- a plain GET request (no ajax/script) runs the risk of timing out on lengthy operations: implement polling in API to get progress updates? - a plain GET request (no ajax/script) runs the risk of timing out on lengthy operations: implement polling in API to get progress updates?
(this would require those operations to run in a separate daemon process which can be monitored by the CGI handler) (this would require those operations to run in a separate daemon process which can be monitored by the CGI handler)
- protect dump function against reference loops (see: http://lua-users.org/wiki/TableSerialization, json also handles this well) - protect dump function against reference loops (see: http://lua-users.org/wiki/TableSerialization, json also handles this well)
- (this is an old todo item from network:available(), might still be relevant at some point) - (this is an old todo item from network:available(), might still be relevant at some point)
extend reconf interface to support function arguments (as tables) so wifihelper functionality can be integrated extend netconf interface to support function arguments (as tables) so wifihelper functionality can be integrated
but how? idea: pass x_args={arg1="a",arg2="2342"} for component 'x' but how? idea: pass x_args={arg1="a",arg2="2342"} for component 'x'
or: allow alternative for x="y" --> x={action="y", arg1="a", arg2="2342"} or: allow alternative for x="y" --> x={action="y", arg1="a", arg2="2342"}
in any case, arguments should be put in a new table to pass to the function (since order is undefined it must be an assoc array) in any case, arguments should be put in a new table to pass to the function (since order is undefined it must be an assoc array)
NOTES: NOTES:
- using iwinfo with interface name 'radio0' yields very little 'info' output while wlan0 works fine - using iwinfo with interface name 'radio0' yields very little 'info' output while wlan0 works fine.
However, sometimes wlan0 disappears (happened after trying to associate with non-existing network)...why?
- The endpoint function info in response objects is incorrect when the global function is called with a blank argument, - The endpoint function info in response objects is incorrect when the global function is called with a blank argument,
to cleanly solve this, module/function resolution should be moved from main() to the request object to cleanly solve this, module/function resolution should be moved from main() to the request object
]]-- ]]--
@ -22,7 +24,7 @@ local l = require("logger")
local RequestClass = require("rest.request") local RequestClass = require("rest.request")
local ResponseClass = require("rest.response") local ResponseClass = require("rest.response")
local wifi = require("network.wlanconfig") local wifi = require("network.wlanconfig")
local reconf = require("network.netconfig") local netconf = require("network.netconfig")
--NOTE: pcall protects from invocation exceptions, which is what we need except --NOTE: pcall protects from invocation exceptions, which is what we need except
@ -50,7 +52,14 @@ local function init()
postData = io.read(n) postData = io.read(n)
end end
return wifi.init() and reconf.init(wifi, true) local s, msg
s, msg = wifi.init()
if not s then return s, msg end
s, msg = netconf.init(wifi, true)
if not s then return s, msg end
return true
end end
--usually returns function+nil, function+number in case of number in place of function name; or --usually returns function+nil, function+number in case of number in place of function name; or
@ -135,12 +144,12 @@ end
end end
end end
local s, msg = init()
if init() == false then if s == false then
local resp = ResponseClass.new() local resp = ResponseClass.new()
resp:setError("initialization failed") resp:setError("initialization failed (" .. msg .. ")")
print(resp:serializeAsJson()) --FIXME: this message does not seem to be sent print(resp:serializeAsJson()) --FIXME: this message does not seem to be sent
l:error("initialization failed") --NOTE: this assumes the logger has been inited properly, despite init() having failed l:error("initialization failed (" .. msg .. ")") --NOTE: this assumes the logger has been inited properly, despite init() having failed
os.exit(1) os.exit(1)
else else
main() main()

View File

@ -7,7 +7,7 @@ local reconf = {}
local wifi local wifi
local reloadSilent local reloadSilent
M.WWW_CAPTIVE_PATH = "/usr/share/lua/wifibox/ext/www" M.WWW_CAPTIVE_PATH = "/usr/share/lua/wifibox/www"
M.WWW_CAPTIVE_INDICATOR = "/www/.wifibox-inplace" M.WWW_CAPTIVE_INDICATOR = "/www/.wifibox-inplace"
M.WWW_RENAME_NAME = "/www-regular" M.WWW_RENAME_NAME = "/www-regular"

View File

@ -1,4 +1,3 @@
local reconf = require("network.netconfig")
local util = require("util.utils") local util = require("util.utils")
local l = require("logger") local l = require("logger")
local uci = require("uci").cursor() local uci = require("uci").cursor()
@ -6,7 +5,9 @@ local iwinfo = require("iwinfo")
local M = {} local M = {}
M.DFL_DEVICE = "wlan0" -- was radio0 --NOTE: fallback device 'radio0' is required because sometimes the wlan0 device disappears
M.DFL_DEVICE = "wlan0"
M.DFL_DEVICE_FALLBACK = "radio0"
M.AP_SSID = "d3d-ap" M.AP_SSID = "d3d-ap"
M.AP_ADDRESS = "192.168.10.1" M.AP_ADDRESS = "192.168.10.1"
M.AP_NETMASK = "255.255.255.0" M.AP_NETMASK = "255.255.255.0"
@ -50,7 +51,14 @@ function M.init(device)
dev = device or M.DFL_DEVICE dev = device or M.DFL_DEVICE
dev_api = iwinfo.type(dev) dev_api = iwinfo.type(dev)
if not dev_api then if not dev_api then
return false, "No such wireless device: '"..dev.."'" --TODO: warn about missing dev here?
local devInitial = dev
dev = M.DFL_DEVICE_FALLBACK
dev_api = iwinfo.type(dev)
if not dev_api then
return false, "No such wireless device: '" .. devInitial .. "' (and fallback '" .. dev .. "' does not exist either)"
end
end end
return true return true

View File

@ -44,7 +44,7 @@ function M.available(d)
r:addData("count", #netInfoList) r:addData("count", #netInfoList)
r:addData("networks", netInfoList) r:addData("networks", netInfoList)
else else
r:setError("No scan results or scanning not possible") r:setFail("No scan results or scanning not possible")
end end
return r return r
@ -121,7 +121,7 @@ function M.assoc(d)
wifi.createConfigFromScanInfo(scanResult, argPhrase) wifi.createConfigFromScanInfo(scanResult, argPhrase)
else else
--check for error --check for error
r:setError("no wireless network with requested SSID is available") r:setFail("no wireless network with requested SSID is available")
r:addData("ssid", argSsid) r:addData("ssid", argSsid)
end end
end end
@ -175,7 +175,7 @@ function M.rm(d)
r:setSuccess("removed wireless network with requested SSID") r:setSuccess("removed wireless network with requested SSID")
r:addData("ssid", argSsid) r:addData("ssid", argSsid)
else else
r:setError("no wireless network with requested SSID") --this used to be a warning instead of an error... r:setFail("no wireless network with requested SSID") --this used to be a warning instead of an error...
r:addData("ssid", argSsid) r:addData("ssid", argSsid)
end end

View File

@ -21,6 +21,12 @@ function M.success(d)
return r return r
end end
function M.fail(d)
local r = ResponseClass.new(d)
r:setFail()
return r
end
function M.error(d) function M.error(d)
local r = ResponseClass.new(d) local r = ResponseClass.new(d)
r:setError("this error has been generated on purpose") r:setError("this error has been generated on purpose")

View File

@ -31,15 +31,21 @@ function M.new(requestObject)
return self return self
end end
function M:setStatus(s) --use set{Success|Fail|Error}()
self.body.status = s --function M:setStatus(s)
end -- self.body.status = s
--end
function M:setSuccess(msg) function M:setSuccess(msg)
self.body.status = "success" self.body.status = "success"
if msg ~= "" then self.body.msg = msg end if msg ~= "" then self.body.msg = msg end
end end
function M:setFail(msg)
self.body.status = "fail"
if msg ~= "" then self.body.msg = msg end
end
function M:setError(msg) function M:setError(msg)
self.body.status = "error" self.body.status = "error"
if msg ~= "" then self.body.msg = msg end if msg ~= "" then self.body.msg = msg end