Fri, 26 May 2023 22:39:38 +0200
Update to handle Prosody module namespacing
This enables installation methods other than squish, such as luarocks
135
c8cad3c42f3d
clix.raw: Import verse, don't rely on globals
Kim Alvefur <zash@zash.se>
parents:
134
diff
changeset
|
1 | local verse = require "verse"; |
168
75e8ca131178
Update to handle Prosody module namespacing
Kim Alvefur <zash@zash.se>
parents:
167
diff
changeset
|
2 | local envload = require "prosody.util.envload".envload; |
75e8ca131178
Update to handle Prosody module namespacing
Kim Alvefur <zash@zash.se>
parents:
167
diff
changeset
|
3 | local xml = require "prosody.util.xml"; |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 | short_opts.i = "interactive"; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 | short_opts.e = "echo"; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 | |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 | return function (opts, args) |
27
5b58c002d6ad
clix.*: Add --short-help and make sure they are working correctly
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
8 | if opts.short_help then |
5b58c002d6ad
clix.*: Add --short-help and make sure they are working correctly
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
9 | print("Send/receive raw XML to/from the server"); |
5b58c002d6ad
clix.*: Add --short-help and make sure they are working correctly
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
10 | return; |
5b58c002d6ad
clix.*: Add --short-help and make sure they are working correctly
Matthew Wild <mwild1@gmail.com>
parents:
23
diff
changeset
|
11 | end |
46
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
12 | |
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
13 | local send_xml; |
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
14 | if opts.stdin then |
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
15 | send_xml = io.read("*a"); |
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
16 | end |
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
17 | |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 | local function on_connect(conn) |
154
e7f579d82b76
clix.raw: Expose the connection to unsandboxed manipulation
Kim Alvefur <zash@zash.se>
parents:
153
diff
changeset
|
19 | _G.conn = conn |
83
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
20 | local print = print; |
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
21 | local function stprint(stanza) |
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
22 | if stanza.attr.to == conn.jid then |
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
23 | stanza.attr.to = nil; |
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
24 | end |
133
be3b857e991f
clix.raw: Use indentation when prettyprinting if available in util.stanza
Kim Alvefur <zash@zash.se>
parents:
132
diff
changeset
|
25 | if opts.pretty and stanza.indent then |
be3b857e991f
clix.raw: Use indentation when prettyprinting if available in util.stanza
Kim Alvefur <zash@zash.se>
parents:
132
diff
changeset
|
26 | return print(stanza:indent(1, " "):pretty_print()); |
be3b857e991f
clix.raw: Use indentation when prettyprinting if available in util.stanza
Kim Alvefur <zash@zash.se>
parents:
132
diff
changeset
|
27 | end |
83
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
28 | return print(stanza); |
040fadcc86f9
clix.raw: Print one incoming stanza per line, instead of raw incoming data.
Kim Alvefur <zash@zash.se>
parents:
68
diff
changeset
|
29 | end |
156
3369ae4ff520
clix.raw: Increase priority of print hook to avoid conflict with iq handler
Kim Alvefur <zash@zash.se>
parents:
154
diff
changeset
|
30 | conn:hook("stanza", stprint, 1) |
46
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
31 | if opts.interactive then |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 | local stdin = { |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 | getfd = function () return 0; end; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 | dirty = function (self) return false; end; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 | settimeout = function () end; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 | send = function (_, d) return #d, 0; end; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 | close = function () end; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 | receive = function (_, patt) |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 | local data = io.stdin:read(patt); |
68
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
40 | if data == nil then |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
41 | conn:close(); |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
42 | end |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 | if opts.echo then |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 | io.write(data, patt == "*l" and "\n" or ""); |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 | end |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 | return data; |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 | end |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 | }; |
132
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
49 | local stwrap; |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
50 | do |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
51 | local f_mt, r_mt = {}, {}; |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
52 | function f_mt:__call(...) if ... and type(...) == "string" then return self{ to=... } end return self._f(...) end |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
53 | function f_mt:__index(k) return setmetatable({_st = self._f{ type = k }}, r_mt); end |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
54 | function r_mt:__call(to) self._st.attr.to = to; return self._st end |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
55 | function stwrap(f) return setmetatable({_f=f},f_mt) end |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
56 | end |
68
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
57 | local env = setmetatable({}, { __index = { |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
58 | s = verse.stanza, |
132
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
59 | m = stwrap(verse.message), |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
60 | p = stwrap(verse.presence), |
3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
Kim Alvefur <zash@zash.se>
parents:
85
diff
changeset
|
61 | iq = stwrap(verse.iq), |
158
703fa6922493
clix raw: Add a convenience function for smacks <r>
Kim Alvefur <zash@zash.se>
parents:
156
diff
changeset
|
62 | r = function () |
703fa6922493
clix raw: Add a convenience function for smacks <r>
Kim Alvefur <zash@zash.se>
parents:
156
diff
changeset
|
63 | return verse.stanza("r", { xmlns = "urn:xmpp:sm:3" }); |
703fa6922493
clix raw: Add a convenience function for smacks <r>
Kim Alvefur <zash@zash.se>
parents:
156
diff
changeset
|
64 | end, |
85
8bc27e310e64
clix.raw: Add a ping command to the sandbox
Kim Alvefur <zash@zash.se>
parents:
84
diff
changeset
|
65 | ping = function(host) |
8bc27e310e64
clix.raw: Add a ping command to the sandbox
Kim Alvefur <zash@zash.se>
parents:
84
diff
changeset
|
66 | return verse.iq{ type="get", to=host}:tag("ping", {xmlns="urn:xmpp:ping"}); |
8bc27e310e64
clix.raw: Add a ping command to the sandbox
Kim Alvefur <zash@zash.se>
parents:
84
diff
changeset
|
67 | end, |
134
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
68 | version = function(host) |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
69 | return verse.iq{ type="get", to=host}:query"jabber:iq:version"; |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
70 | end, |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
71 | vcard = function(who) |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
72 | return verse.iq{ type="get", to=who}:tag("vCard",{xmlns="vcard-temp"}); |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
73 | end, |
138
1783d4226ba1
clix.raw: Give access to the verse pubsub module
Kim Alvefur <zash@zash.se>
parents:
137
diff
changeset
|
74 | pubsub = function(...) |
1783d4226ba1
clix.raw: Give access to the verse pubsub module
Kim Alvefur <zash@zash.se>
parents:
137
diff
changeset
|
75 | return conn.pubsub(...); |
1783d4226ba1
clix.raw: Give access to the verse pubsub module
Kim Alvefur <zash@zash.se>
parents:
137
diff
changeset
|
76 | end, |
134
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
77 | disco = function (to, node) |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
78 | return verse.iq{ type="get", to=to }:tag("query", { xmlns="http://jabber.org/protocol/disco#info", node = node }); |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
79 | end, |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
80 | items = function (to, node) |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
81 | return verse.iq{ type="get", to=to }:tag("query", { xmlns="http://jabber.org/protocol/disco#items", node = node }); |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
82 | end, |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
83 | join = function (roomnick) |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
84 | return verse.presence({ to=roomnick }):tag("x", { xmlns="http://jabber.org/protocol/muc" }); |
d1fa853325b9
clix.raw: Add sevral shorthand functions for common queries
Kim Alvefur <zash@zash.se>
parents:
133
diff
changeset
|
85 | end, |
68
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
86 | }}); |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 | local function on_incoming(stdin, data) |
68
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
88 | if not data then |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
89 | conn:close(); |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
90 | return |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
91 | end |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
92 | if data:sub(1,1) ~= "<" then |
153
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
93 | local sandboxed = true; |
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
94 | if data:sub(1,1) == ">" then |
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
95 | sandboxed = false; |
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
96 | data = data:sub(2); |
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
97 | else |
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
98 | data = "return "..data; |
56546fb3429b
clix.raw: Allow unsandboxed arbitrary code execution
Kim Alvefur <zash@zash.se>
parents:
152
diff
changeset
|
99 | end |
167
57bb6e03d239
clix.raw: Update sandboxing to use util.envload and work with Lua 5.2+
Kim Alvefur <zash@zash.se>
parents:
158
diff
changeset
|
100 | local chunk, err = envload(data, "@stdin", sandboxed and env or _G); |
84
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
101 | if not chunk then |
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
102 | conn:error(err); |
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
103 | return; |
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
104 | end |
68
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
105 | data = ""; |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
106 | local ok, ret = pcall(chunk); |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
107 | if ok then |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
108 | data = ret |
84
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
109 | else |
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
110 | conn:error(ret); |
1b4e64176288
clix.raw: Nicer error reporting from the sandbox.
Kim Alvefur <zash@zash.se>
parents:
83
diff
changeset
|
111 | return; |
68
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
112 | end |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
113 | end |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
114 | if data then |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
115 | conn:send(data); |
b7d92ed9c268
clix.raw: Add a small sandbox with util.stanza functions
Kim Alvefur <zash@zash.se>
parents:
46
diff
changeset
|
116 | end |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 | if not opts.interactive then |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 | conn:close(); |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 | end |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 | end |
168
75e8ca131178
Update to handle Prosody module namespacing
Kim Alvefur <zash@zash.se>
parents:
167
diff
changeset
|
121 | stdin = verse.server.wrapclient(stdin, "stdin", 0, { |
152
c729365f1091
clix.raw: Handle (ignore, successfully) read timeouts on stdin
Kim Alvefur <zash@zash.se>
parents:
151
diff
changeset
|
122 | onincoming = on_incoming, ondisconnect = function () conn:close() end, onreadtimeout = function () return true; end |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 | }, "*l"); |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 | else |
149 | 125 | if not send_xml then |
126 | send_xml = table.concat(args, " "); | |
46
b5d6e443e571
raw: If using --stdin and not --interactive then buffer all data before connecting, more reliable in a non-interactive environment
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
127 | end |
150
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
128 | send_xml = assert(xml.parse(send_xml)); |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
129 | if send_xml.name == "iq" then |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
130 | conn:send_iq(send_xml, function () |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
131 | conn:close(); |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
132 | end); |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
133 | else |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
134 | conn:send(send_xml); |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
135 | conn:close(); |
af9b9acb10d6
clix.raw: Track and print response to iq stanza given as cli argument
Kim Alvefur <zash@zash.se>
parents:
149
diff
changeset
|
136 | end |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 | end |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 | |
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 | end |
137
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
140 | local plugins = {}; |
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
141 | for i=#args,1,-1 do |
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
142 | if args[i]:sub(1,1) == "+" then |
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
143 | table.insert(plugins, table.remove(args, i):sub(2)) |
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
144 | end |
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
145 | end |
7130d5ec115c
clix.raw: Allow specifying extra plugins to load
Kim Alvefur <zash@zash.se>
parents:
136
diff
changeset
|
146 | return clix_connect(opts, on_connect, plugins); |
19
3a0a156e0a79
clix.raw: New command to set up a raw XML in/out session with the server
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 | end |