diff --git a/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua b/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua index 7f3f62e2..3c9b8601 100644 --- a/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua +++ b/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua @@ -3,6 +3,7 @@ module('gluon.announce', package.seeall) fs = require 'luci.fs' +json = require 'luci.json' uci = require('luci.model.uci').cursor() util = require 'luci.util' @@ -15,7 +16,7 @@ local function collect_entry(entry) end function collect_dir(dir) - local ret = {} + local ret = { [json.null] = true } for _, entry in ipairs(fs.dir(dir)) do if entry:sub(1, 1) ~= '.' then diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/batadv b/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/batadv index f93a11f9..cfdd72dc 100644 --- a/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/batadv +++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/batadv @@ -1,7 +1,3 @@ -local json = require 'luci.json' -local util = require 'luci.util' -local fs = require 'nixio.fs' - local ifname_address_cache = {} function ifname2address(ifname) @@ -26,7 +22,7 @@ function batadv() if mac1 ~= nil and mac1 == mac2 then ifaddress = ifname2address(ifname) if interfaces[ifaddress] == nil then - interfaces[ifaddress] = { neighbours = {} } + interfaces[ifaddress] = { neighbours = { [json.null] = true } } end interfaces[ifaddress].neighbours[mac1] = { tq = tonumber(tq) @@ -35,7 +31,9 @@ function batadv() end end - return interfaces + if next(interfaces) then + return interfaces + end end return batadv() diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/wifi b/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/wifi index d3754222..26168003 100644 --- a/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/wifi +++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/neighbours.d/wifi @@ -1,6 +1,3 @@ -local json = require 'luci.json' -local util = require 'luci.util' -local fs = require 'nixio.fs' local iwinfo = require 'iwinfo' function neighbours(iface) @@ -12,7 +9,9 @@ function neighbours(iface) } end - return stations + if next(stations) then + return stations + end end function interfaces() @@ -38,4 +37,6 @@ for address, iface in pairs(interfaces()) do wifi[address] = { neighbours = neighbours(iface) } end -return wifi +if next(wifi) then + return wifi +end diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/nodeinfo.d/network/mesh/bat0/interfaces b/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/nodeinfo.d/network/mesh/bat0/interfaces index 97180b81..e0c3c9ac 100644 --- a/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/nodeinfo.d/network/mesh/bat0/interfaces +++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/announce/nodeinfo.d/network/mesh/bat0/interfaces @@ -48,5 +48,6 @@ end return { wireless = nil_table(wireless), tunnel = nil_table(tunnel), - other = nil_table(other) + other = nil_table(other), + [json.null] = true } diff --git a/patches/packages/luci/0003-luci-lib-json-ignore-null-keys-to-allow-encoding-empty-objects.patch b/patches/packages/luci/0003-luci-lib-json-ignore-null-keys-to-allow-encoding-empty-objects.patch new file mode 100644 index 00000000..0f0a2cff --- /dev/null +++ b/patches/packages/luci/0003-luci-lib-json-ignore-null-keys-to-allow-encoding-empty-objects.patch @@ -0,0 +1,36 @@ +From: Matthias Schiffer +Date: Thu, 4 Jun 2015 21:03:24 +0200 +Subject: luci-lib-json: ignore null keys to allow encoding empty objects + +There is currently no way to encode an empty object {}, as empty tables are +encoded as empty lists []. + +With this patch, encode() will ignore table fields with the key json.null (which +doesn't make sense anyways). This allows adding a field with key json.null to +force encoding it as an object. + +Signed-off-by: Matthias Schiffer + +diff --git a/libs/json/luasrc/json.lua b/libs/json/luasrc/json.lua +index 8dbaf91..11a5608 100644 +--- a/libs/json/luasrc/json.lua ++++ b/libs/json/luasrc/json.lua +@@ -205,11 +205,13 @@ function Encoder.parse_iter(self, obj) + local first = true + + for key, entry in pairs(obj) do +- first = first or self:put(",") +- first = first and false +- self:parse_string(tostring(key)) +- self:put(":") +- self:dispatch(entry) ++ if key ~= null then ++ first = first or self:put(",") ++ first = first and false ++ self:parse_string(tostring(key)) ++ self:put(":") ++ self:dispatch(entry) ++ end + end + + self:put("}")