X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Frpc%2Fluasrc%2Fjsonrpc.lua;h=1c0db8bcefbb622254e755658f5591525de4fbdc;hp=84a7f7056c6525e1c53f71c639d2fbe5be293cec;hb=91ba7c42f5b45614c9f4c803d09399f08a8e27b1;hpb=3bcab661283d5b9886e46d6bcdab0e756b044997 diff --git a/modules/rpc/luasrc/jsonrpc.lua b/modules/rpc/luasrc/jsonrpc.lua index 84a7f7056..1c0db8bce 100644 --- a/modules/rpc/luasrc/jsonrpc.lua +++ b/modules/rpc/luasrc/jsonrpc.lua @@ -23,19 +23,21 @@ function resolve(mod, method) if not type(mod) == "table" then break end - mod = mod[path[j]] + mod = rawget(mod, path[j]) if not mod then break end end - mod = type(mod) == "table" and mod[path[#path]] or nil + mod = type(mod) == "table" and rawget(mod, path[#path]) or nil if type(mod) == "function" then return mod end end -function handle(tbl, rawdata) - local stat, json = luci.util.copcall(luci.json.Decode, rawdata) +function handle(tbl, rawsource, ...) + local decoder = luci.json.Decoder() + local stat = luci.ltn12.pump.all(rawsource, decoder:sink()) + local json = decoder:get() local response local success = false @@ -54,22 +56,22 @@ function handle(tbl, rawdata) nil, {code=-32600, message="Invalid request."}) end else - response = reply(json.jsonrpc, nil, + response = reply("2.0", nil, nil, {code=-32700, message="Parse error."}) end - return luci.json.Encode(response) + return luci.json.Encoder(response, ...):source() end function reply(jsonrpc, id, res, err) require "luci.json" - id = id or luci.json.Null + id = id or luci.json.null -- 1.0 compatibility if jsonrpc ~= "2.0" then jsonrpc = nil - res = res or luci.json.Null - err = err or luci.json.Null + res = res or luci.json.null + err = err or luci.json.null end return {id=id, result=res, error=err, jsonrpc=jsonrpc} @@ -83,7 +85,7 @@ function proxy(method, ...) return nil, {code=-32602, message="Invalid params.", data=table.remove(res, 1)} else if #res <= 1 then - return res[1] or luci.json.Null + return res[1] or luci.json.null else return res end