12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #!/usr/bin/lua
- util = require 'luci.util'
- json = require 'luci.jsonc'
- nixio = require 'nixio'
- iwinfo = require 'iwinfo'
- function badrequest()
- io.write("Status: 400 Bad Request\n\n")
- os.exit(1)
- end
- function get_stations(iw, ifname)
- local stations = {}
- for k, v in pairs(iw.assoclist(ifname)) do
- stations[k:lower()] = {signal = v.signal, noise = v.noise, inactive = v.inactive}
- end
- return stations
- end
- local ifname = os.getenv("QUERY_STRING")
- if ifname == nil then badrequest() end
- local list = util.exec('batctl if')
- local found = false
- for _, line in ipairs(util.split(list)) do
- if ifname == line:match('^(.-):') then
- found = true
- break
- end
- end
- if found == false then badrequest() end
- local wifitype = iwinfo.type(ifname)
- if wifitype == nil then badrequest() end
- local iw = iwinfo[wifitype]
- io.write("Access-Control-Allow-Origin: *\n")
- io.write("Content-type: text/event-stream\n\n")
- while true do
- local stations = json.stringify(get_stations(iw, ifname))
- io.write("data: " .. stations .. "\n\n")
- io.flush()
- nixio.nanosleep(0, 150e6)
- end
|