local serial = require "serialization" local minitel = require "minitel" local buffer = require "buffer" local lz16 = require "liblz16" local rpc = require "rpc" local server local port = 15 local f = io.open("/etc/invsrv","rb") if not f then error("no server configured") end server=f:read() port=tonumber(f:read()) or port f:close() local inv = setmetatable({}, {__index=rpc.proxy(server, "inv_")}) function inv.matchAll(criteria, fuzzy) local socket = minitel.open(server,port) if not socket then return false end local cstr = "compress=true\tfuzzy="..tostring(fuzzy) for k,v in pairs(criteria) do cstr=string.format("%s\t%s=%s", cstr, k, v) end socket:write(cstr.."\n") socket.mode = {r=true} local function cread() if socket.state ~= "open" then return nil end os.sleep(0.05) return socket:read("*a") end local lsock = lz16.buffer(buffer.new("rb",{read = cread,close=function() end})) local rt = {} for line in lsock:lines() do rt[#rt+1] = serial.unserialize(line) end lsock:close() return rt end return inv