util/xmlrpc.lua

Wed, 13 Jan 2010 00:04:38 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Wed, 13 Jan 2010 00:04:38 +0000
changeset 2796
1e287badd033
parent 1554
06030af44fad
child 2923
b7049746bd29
permissions
-rw-r--r--

prosodyctl: Use mode r+ for opening the file so 1) it fails if the file doesn't exist 2) we have write access to lock it

1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1498
diff changeset
1 -- Prosody IM
874
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2009 Matthew Wild
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2009 Waqas Hussain
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4 --
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 --
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 local pairs = pairs;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11 local type = type;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12 local error = error;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 local t_concat = table.concat;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 local t_insert = table.insert;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 local tostring = tostring;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16 local tonumber = tonumber;
1498
481dfc89047a util.xmlrpc: Support for multiple parameters in requests
Matthew Wild <mwild1@gmail.com>
parents: 1497
diff changeset
17 local select = select;
874
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 local st = require "util.stanza";
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 module "xmlrpc"
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22 local _lua_to_xmlrpc;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23 local map = {
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 table=function(stanza, object)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25 stanza:tag("struct");
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26 for name, value in pairs(object) do
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
27 stanza:tag("member");
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28 stanza:tag("name"):text(tostring(name)):up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 stanza:tag("value");
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 _lua_to_xmlrpc(stanza, value);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31 stanza:up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 stanza:up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34 stanza:up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36 boolean=function(stanza, object)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37 stanza:tag("boolean"):text(object and "1" or "0"):up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39 string=function(stanza, object)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
40 stanza:tag("string"):text(object):up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 number=function(stanza, object)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 stanza:tag("int"):text(tostring(object)):up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 end;
888
1059230969c3 util/xmlrpc: Added <nil/> extension to RPC functions (allowing nil parameters and return values)
Waqas Hussain <waqas20@gmail.com>
parents: 874
diff changeset
45 ["nil"]=function(stanza, object) -- nil extension
1059230969c3 util/xmlrpc: Added <nil/> extension to RPC functions (allowing nil parameters and return values)
Waqas Hussain <waqas20@gmail.com>
parents: 874
diff changeset
46 stanza:tag("nil"):up();
1059230969c3 util/xmlrpc: Added <nil/> extension to RPC functions (allowing nil parameters and return values)
Waqas Hussain <waqas20@gmail.com>
parents: 874
diff changeset
47 end;
874
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 };
1554
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
49 _lua_to_xmlrpc = function(stanza, object)
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
50 local h = map[type(object)];
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
51 if h then
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
52 h(stanza, object);
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
53 else
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
54 error("Type not supported by XML-RPC: " .. type(object));
874
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 function create_response(object)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 local stanza = st.stanza("methodResponse"):tag("params"):tag("param"):tag("value");
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59 _lua_to_xmlrpc(stanza, object);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60 stanza:up():up():up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
61 return stanza;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63 function create_error_response(faultCode, faultString)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
64 local stanza = st.stanza("methodResponse"):tag("fault"):tag("value");
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 _lua_to_xmlrpc(stanza, {faultCode=faultCode, faultString=faultString});
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 stanza:up():up();
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 return stanza;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69
1498
481dfc89047a util.xmlrpc: Support for multiple parameters in requests
Matthew Wild <mwild1@gmail.com>
parents: 1497
diff changeset
70 function create_request(method_name, ...)
1497
4c2c403ca04b util.xmlrpc: Add create_request
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
71 local stanza = st.stanza("methodCall")
4c2c403ca04b util.xmlrpc: Add create_request
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
72 :tag("methodName"):text(method_name):up()
1498
481dfc89047a util.xmlrpc: Support for multiple parameters in requests
Matthew Wild <mwild1@gmail.com>
parents: 1497
diff changeset
73 :tag("params");
1554
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
74 for i=1,select('#', ...) do
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
75 stanza:tag("param"):tag("value");
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
76 _lua_to_xmlrpc(stanza, select(i, ...));
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
77 stanza:up():up();
06030af44fad util.xmlrpc: Fixed table serialization (regression introduced in previous change)
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
78 end
1497
4c2c403ca04b util.xmlrpc: Add create_request
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
79 stanza:up():up():up();
4c2c403ca04b util.xmlrpc: Add create_request
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
80 return stanza;
4c2c403ca04b util.xmlrpc: Add create_request
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
81 end
874
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
82
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
83 local _xmlrpc_to_lua;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
84 local int_parse = function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
85 if #stanza.tags ~= 0 or #stanza == 0 then error("<"..stanza.name.."> must have a single text child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
86 local n = tonumber(t_concat(stanza));
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
87 if n then return n; end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
88 error("Failed to parse content of <"..stanza.name..">");
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
89 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
90 local rmap = {
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
91 methodCall=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
92 if #stanza.tags ~= 2 then error("<methodCall> must have exactly two subtags"); end -- FIXME <params> is optional
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
93 if stanza.tags[1].name ~= "methodName" then error("First <methodCall> child tag must be <methodName>") end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
94 if stanza.tags[2].name ~= "params" then error("Second <methodCall> child tag must be <params>") end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
95 return _xmlrpc_to_lua(stanza.tags[1]), _xmlrpc_to_lua(stanza.tags[2]);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
96 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
97 methodName=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
98 if #stanza.tags ~= 0 then error("<methodName> must not have any subtags"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
99 if #stanza == 0 then error("<methodName> must have text content"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
100 return t_concat(stanza);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
101 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
102 params=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
103 local t = {};
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
104 for _, child in pairs(stanza.tags) do
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
105 if child.name ~= "param" then error("<params> can only have <param> children"); end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
106 t_insert(t, _xmlrpc_to_lua(child));
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
107 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
108 return t;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
109 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
110 param=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
111 if not(#stanza.tags == 1 and stanza.tags[1].name == "value") then error("<param> must have exactly one <value> child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
112 return _xmlrpc_to_lua(stanza.tags[1]);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
113 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
114 value=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
115 if #stanza.tags == 0 then return t_concat(stanza); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
116 if #stanza.tags ~= 1 then error("<value> must have a single child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
117 return _xmlrpc_to_lua(stanza.tags[1]);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
118 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
119 int=int_parse;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
120 i4=int_parse;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
121 double=int_parse;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
122 boolean=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
123 if #stanza.tags ~= 0 or #stanza == 0 then error("<boolean> must have a single text child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
124 local b = t_concat(stanza);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
125 if b ~= "1" and b ~= "0" then error("Failed to parse content of <boolean>"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
126 return b == "1" and true or false;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
127 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
128 string=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
129 if #stanza.tags ~= 0 then error("<string> must have a single text child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
130 return t_concat(stanza);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
131 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
132 array=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
133 if #stanza.tags ~= 1 then error("<array> must have a single <data> child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
134 return _xmlrpc_to_lua(stanza.tags[1]);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
135 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
136 data=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
137 local t = {};
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
138 for _,child in pairs(stanza.tags) do
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
139 if child.name ~= "value" then error("<data> can only have <value> children"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
140 t_insert(t, _xmlrpc_to_lua(child));
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
141 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
142 return t;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
143 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
144 struct=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
145 local t = {};
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
146 for _,child in pairs(stanza.tags) do
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
147 if child.name ~= "member" then error("<struct> can only have <member> children"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
148 local name, value = _xmlrpc_to_lua(child);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
149 t[name] = value;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
150 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
151 return t;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
152 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
153 member=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
154 if #stanza.tags ~= 2 then error("<member> must have exactly two subtags"); end -- FIXME <params> is optional
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
155 if stanza.tags[1].name ~= "name" then error("First <member> child tag must be <name>") end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
156 if stanza.tags[2].name ~= "value" then error("Second <member> child tag must be <value>") end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
157 return _xmlrpc_to_lua(stanza.tags[1]), _xmlrpc_to_lua(stanza.tags[2]);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
158 end;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
159 name=function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
160 if #stanza.tags ~= 0 then error("<name> must have a single text child"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
161 local n = t_concat(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
162 if tostring(tonumber(n)) == n then n = tonumber(n); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
163 return n;
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
164 end;
888
1059230969c3 util/xmlrpc: Added <nil/> extension to RPC functions (allowing nil parameters and return values)
Waqas Hussain <waqas20@gmail.com>
parents: 874
diff changeset
165 ["nil"]=function(stanza) -- nil extension
1059230969c3 util/xmlrpc: Added <nil/> extension to RPC functions (allowing nil parameters and return values)
Waqas Hussain <waqas20@gmail.com>
parents: 874
diff changeset
166 return nil;
1059230969c3 util/xmlrpc: Added <nil/> extension to RPC functions (allowing nil parameters and return values)
Waqas Hussain <waqas20@gmail.com>
parents: 874
diff changeset
167 end;
874
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
168 }
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
169 _xmlrpc_to_lua = function(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
170 local h = rmap[stanza.name];
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
171 if h then
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
172 return h(stanza);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
173 else
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
174 error("Unknown element: "..stanza.name);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
175 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
176 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
177 function translate_request(stanza)
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
178 if stanza.name ~= "methodCall" then error("XML-RPC requests must have <methodCall> as root element"); end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
179 return _xmlrpc_to_lua(stanza);
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
180 end
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
181
a554bf5057a0 Added util/xmlrpc.lua - functions for converting between XML-RPC stanzas and Lua objects
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
182 return _M;

mercurial