verse.lua

Thu, 23 Mar 2023 15:12:30 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 23 Mar 2023 15:12:30 +0000
changeset 174
662bd8c5ae28
parent 103
9e0e56393978
child 177
3c19b67a1f0f
permissions
-rw-r--r--

Serialize XML in a consistent order by default

This overrides all XML serialization to emit attributes in an ordered form, so
the XML will match across multiple runs. This can be useful for comparing
different runs, or even two stanzas printed in the same run (e.g. if there is
a mismatch).

12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 package.preload['util.encodings']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
12 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 error("Function not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
16 local e=require"mime";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
17 a"encodings"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 stringprep={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
19 base64={encode=e.b64,decode=e.unb64};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
20 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 package.preload['util.hashes']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
23 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
24 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
25 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
26 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
27 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
28 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
29 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
30 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
31 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
32 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
33 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
34 local function t(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
35 error("Hash method "..e.." not available",2);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
36 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
37 local e=setmetatable({},{__index=t});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
38 local function t(e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
39 local e,a=pcall(require,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
40 if e then o(a);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
41 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
42 t("bgcrypto.md5",function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
43 e.md5=t.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
44 e.hmac_md5=t.hmac.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
45 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
46 t("bgcrypto.sha1",function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
47 e.sha1=t.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
48 e.hmac_sha1=t.hmac.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
49 e.scram_Hi_sha1=function(e,a,o)return t.pbkdf2(e,a,o,20);end;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
50 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
51 t("bgcrypto.sha256",function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
52 e.sha256=t.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
53 e.hmac_sha256=t.hmac.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
54 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
55 t("bgcrypto.sha512",function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
56 e.sha512=t.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
57 e.hmac_sha512=t.hmac.digest;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
58 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
59 t("sha1",function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
60 e.sha1=function(e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
61 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
62 return t.sha1(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
63 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
64 return(t.binary(e));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
65 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
66 end;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
67 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
68 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 package.preload['lib.adhoc']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
71 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
72 local function r(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
73 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
74 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
75 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
76 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
77 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
78 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
79 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
80 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
81 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
82 local s,i=require"util.stanza",require"util.uuid";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 local e="http://jabber.org/protocol/commands";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
84 local n={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
85 local h={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
86 local function o(i,o,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
87 local e=s.stanza("command",{xmlns=e,node=i.node,status=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 if t then e.attr.sessionid=t;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 if a then e.attr.action=a;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
92 function h.new(a,i,e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
93 return{name=a,node=i,handler=e,cmdtag=o,permission=(t or"user")};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
94 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
95 function h.handle_cmd(o,h,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
96 local e=t.tags[1].attr.sessionid or i.generate();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
97 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
98 a.to=t.attr.to;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
99 a.from=t.attr.from;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
100 a.action=t.tags[1].attr.action or"execute";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
101 a.form=t.tags[1]:child_with_ns("jabber:x:data");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
102 local a,i=o:handler(a,n[e]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
103 n[e]=i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
104 local i=s.reply(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
105 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
106 if a.status=="completed"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
107 n[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
108 t=o:cmdtag("completed",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
109 elseif a.status=="canceled"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
110 n[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
111 t=o:cmdtag("canceled",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
112 elseif a.status=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
113 n[e]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
114 i=s.error_reply(i,a.error.type,a.error.condition,a.error.message);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
115 h.send(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
118 t=o:cmdtag("executing",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
119 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
120 for a,e in pairs(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
121 if a=="info"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
122 t:tag("note",{type="info"}):text(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
123 elseif a=="warn"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
124 t:tag("note",{type="warn"}):text(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
125 elseif a=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
126 t:tag("note",{type="error"}):text(e.message):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
127 elseif a=="actions"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
128 local a=s.stanza("actions");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
129 for i,e in ipairs(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 if(e=="prev")or(e=="next")or(e=="complete")then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
131 a:tag(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
132 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
133 r:log("error",'Command "'..o.name..
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
134 '" at node "'..o.node..'" provided an invalid action "'..e..'"');
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
135 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
136 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
137 t:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
138 elseif a=="form"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
139 t:add_child((e.layout or e):form(e.values));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
140 elseif a=="result"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
141 t:add_child((e.layout or e):form(e.values,"result"));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
142 elseif a=="other"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
143 t:add_child(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
144 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
145 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
146 i:add_child(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
147 h.send(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
150 return h;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 package.preload['util.stanza']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
153 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
154 local function h(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
155 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
156 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
157 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
158 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
159 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
160 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
161 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
162 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
163 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 local t=table.insert;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
165 local s=table.remove;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
166 local p=table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
167 local r=string.format;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
168 local u=string.match;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
169 local w=tostring;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 local m=setmetatable;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
171 local n=pairs;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
172 local i=ipairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
173 local o=type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
174 local y=string.gsub;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
175 local l=string.sub;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
176 local f=string.find;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177 local e=os;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
178 local c=not e.getenv("WINDIR");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
179 local d,a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
180 if c then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 local t,e=pcall(require,"util.termcolours");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 if t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
183 d,a=e.getstyle,e.getstring;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
184 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
185 c=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
186 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
187 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
188 local v="urn:ietf:params:xml:ns:xmpp-stanzas";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
189 h"stanza"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
190 stanza_mt={__type="stanza"};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
191 stanza_mt.__index=stanza_mt;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
192 local e=stanza_mt;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
193 function stanza(a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
194 local t={name=a,attr=t or{},tags={}};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 return m(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
197 local h=stanza;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 function e:query(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 return self:tag("query",{xmlns=e});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 function e:body(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 return self:tag("body",e):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
204 function e:tag(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
205 local a=h(a,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 if not e then e={};self.last_add=e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 (e[#e]or self):add_direct_child(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 t(e,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 function e:text(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 function e:up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 local e=self.last_add;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
219 if e then s(e);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
221 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
222 function e:reset()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
223 self.last_add=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 function e:add_direct_child(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
227 if o(e)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
228 t(self.tags,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
230 t(self,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
231 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
232 function e:add_child(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
235 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
236 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
237 function e:get_child(t,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
238 for o,e in i(self.tags)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
239 if(not t or e.name==t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
240 and((not a and self.attr.xmlns==e.attr.xmlns)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
241 or e.attr.xmlns==a)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
242 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
245 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
246 function e:get_child_text(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
247 local e=self:get_child(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
249 return e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
253 function e:child_with_name(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
254 for a,e in i(self.tags)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
255 if e.name==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
256 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
258 function e:child_with_ns(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
259 for a,e in i(self.tags)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 if e.attr.xmlns==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
261 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
262 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
263 function e:children()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
265 return function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 e=e+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 return t[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
268 end,self,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
269 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
270 function e:childtags(i,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
271 local e=self.tags;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
272 local a,t=1,#e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
273 return function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
274 for t=a,t do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
275 local e=e[t];
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
276 if(not i or e.name==i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
277 and((not o and self.attr.xmlns==e.attr.xmlns)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
278 or e.attr.xmlns==o)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
279 a=t+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
280 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
281 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
282 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
283 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
284 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
285 function e:maptags(i)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
286 local o,t=self.tags,1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
287 local n,a=#self,#o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
288 local e=1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
289 while t<=a and a>0 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
290 if self[e]==o[t]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
291 local i=i(self[e]);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
292 if i==nil then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
293 s(self,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
294 s(o,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
295 n=n-1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
296 a=a-1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
297 e=e-1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
298 t=t-1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
299 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
300 self[e]=i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
301 o[t]=i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
302 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
303 t=t+1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305 e=e+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
306 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
308 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
309 function e:find(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
310 local e=1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
311 local s=#a+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
312 repeat
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
313 local o,t,n;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
314 local i=l(a,e,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
315 if i=="@"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
316 return self.attr[l(a,e+1)];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
317 elseif i=="{"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
318 o,e=u(a,"^([^}]+)}()",e+1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
319 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
320 t,n,e=u(a,"^([^@/#]*)([/#]?)()",e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
321 t=t~=""and t or nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
322 if e==s then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
323 if n=="#"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
324 return self:get_child_text(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
325 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
326 return self:get_child(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
327 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
328 self=self:get_child(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
329 until not self
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
330 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
331 local l
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
332 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
333 local e={["'"]="&apos;",["\""]="&quot;",["<"]="&lt;",[">"]="&gt;",["&"]="&amp;"};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
334 function l(t)return(y(t,"['&<>\"]",e));end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
335 _M.xml_escape=l;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
336 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
337 local function y(o,e,h,a,r)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
338 local i=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
339 local s=o.name
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
340 t(e,"<"..s);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
341 for o,n in n(o.attr)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
342 if f(o,"\1",1,true)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
343 local s,o=u(o,"^([^\1]*)\1?(.*)$");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
344 i=i+1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
345 t(e," xmlns:ns"..i.."='"..a(s).."' ".."ns"..i..":"..o.."='"..a(n).."'");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
346 elseif not(o=="xmlns"and n==r)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
347 t(e," "..o.."='"..a(n).."'");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
349 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 local i=#o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351 if i==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
352 t(e,"/>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 t(e,">");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 for i=1,i do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 local i=o[i];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
357 if i.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 h(i,e,h,a,o.attr.xmlns);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
360 t(e,a(i));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
361 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
362 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 t(e,"</"..s..">");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
365 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
366 function e.__tostring(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
367 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
368 y(t,e,y,l,nil);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
369 return p(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
370 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
371 function e.top_tag(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
372 local e="";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
373 if t.attr then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
374 for t,a in n(t.attr)do if o(t)=="string"then e=e..r(" %s='%s'",t,l(w(a)));end end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
375 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
376 return r("<%s%s>",t.name,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
377 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
378 function e.get_text(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
379 if#e.tags==0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
380 return p(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
381 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
382 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
383 function e.get_error(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
384 local o,a,t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
385 local e=e:get_child("error");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
386 if not e then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
387 return nil,nil,nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
388 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
389 o=e.attr.type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
390 for o,e in i(e.tags)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
391 if e.attr.xmlns==v then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
392 if not t and e.name=="text"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
393 t=e:get_text();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
394 elseif not a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
395 a=e.name;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
396 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
397 if a and t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
398 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
400 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
401 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
402 return o,a or"undefined-condition",t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
403 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
404 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
405 local e=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
406 function new_id()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
407 e=e+1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
408 return"lx"..e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
409 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
410 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
411 function preserialize(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
412 local a={name=e.name,attr=e.attr};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
413 for i,e in i(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
414 if o(e)=="table"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
415 t(a,preserialize(e));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
416 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
417 t(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
418 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
419 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
420 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
421 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
422 function deserialize(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
423 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
424 local s=a.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
425 for e=1,#s do s[e]=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
426 local h={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
427 for e in n(s)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
428 if f(e,"|",1,true)and not f(e,"\1",1,true)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
429 local t,a=u(e,"^([^|]+)|(.+)$");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
430 h[t.."\1"..a]=s[e];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
431 s[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
432 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
433 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
434 for t,e in n(h)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
435 s[t]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
436 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
437 m(a,e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
438 for t,e in i(a)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
439 if o(e)=="table"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
440 deserialize(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
441 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
443 if not a.tags then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
444 local n={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
445 for i,e in i(a)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
446 if o(e)=="table"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
447 t(n,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
448 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
449 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
450 a.tags=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
452 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
453 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
454 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
455 local function s(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
456 local i,o={},{};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
457 for t,e in n(a.attr)do i[t]=e;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
458 local i={name=a.name,attr=i,tags=o};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
459 for e=1,#a do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
460 local e=a[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
461 if e.name then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
462 e=s(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
463 t(o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
464 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
465 t(i,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
466 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
467 return m(i,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
468 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
469 clone=s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
470 function message(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
471 if not e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
472 return h("message",t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
473 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
474 return h("message",t):tag("body"):text(e):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
475 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
476 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
477 function iq(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
478 if e and not e.id then e.id=new_id();end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
479 return h("iq",e or{id=new_id()});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
480 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
481 function reply(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
482 return h(e.name,e.attr and{to=e.attr.from,from=e.attr.to,id=e.attr.id,type=((e.name=="iq"and"result")or e.attr.type)});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
483 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
484 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
485 local t={xmlns=v};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
486 function error_reply(e,o,i,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
487 local e=reply(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
488 e.attr.type="error";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
489 e:tag("error",{type=o})
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
490 :tag(i,t):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
491 if(a)then e:tag("text",t):text(a):up();end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
492 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
493 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
494 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
495 function presence(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
496 return h("presence",e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
497 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
498 if c then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
499 local s=d("yellow");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
500 local h=d("red");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
501 local u=d("red");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
502 local t=d("magenta");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
503 local h=" "..a(s,"%s")..a(t,"=")..a(h,"'%s'");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
504 local s=a(t,"<")..a(u,"%s").."%s"..a(t,">");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
505 local d=s.."%s"..a(t,"</")..a(u,"%s")..a(t,">");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
506 function e.pretty_print(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
507 local t="";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
508 for a,e in i(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
509 if o(e)=="string"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
510 t=t..l(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
511 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
512 t=t..e:pretty_print();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
513 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
514 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
515 local a="";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
516 if e.attr then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
517 for e,t in n(e.attr)do if o(e)=="string"then a=a..r(h,e,w(t));end end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
518 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
519 return r(d,e.name,a,t,e.name);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
520 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
521 function e.pretty_top_tag(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
522 local t="";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
523 if e.attr then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
524 for e,a in n(e.attr)do if o(e)=="string"then t=t..r(h,e,w(a));end end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
525 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
526 return r(s,e.name,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
527 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
528 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
529 e.pretty_print=e.__tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
530 e.pretty_top_tag=e.top_tag;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
531 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
532 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
533 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
534 package.preload['util.timer']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
535 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
536 local function o(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
537 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
538 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
539 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
540 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
541 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
542 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
543 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
544 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
545 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
546 local a=require"net.server";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
547 local h=math.min
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
548 local u=math.huge
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
549 local i=require"socket".gettime;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
550 local d=table.insert;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
551 local l=pairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
552 local r=type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
553 local s={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
554 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
555 o"timer"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
556 local t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
557 if not a.event then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
558 function t(o,n)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
559 local i=i();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
560 o=o+i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
561 if o>=i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
562 d(e,{o,n});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
563 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
564 local e=n(i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
565 if e and r(e)=="number"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
566 return t(e,n);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
567 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
568 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
569 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
570 a._addtimer(function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
571 local a=i();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
572 if#e>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
573 for a,t in l(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
574 d(s,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
576 e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
577 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
578 local e=u;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
579 for n,o in l(s)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
580 local o,i=o[1],o[2];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
581 if o<=a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
582 s[n]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
583 local a=i(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
584 if r(a)=="number"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
585 t(a,i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
586 e=h(e,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
587 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
588 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
589 e=h(e,o-a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
590 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
591 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
592 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
593 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
594 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
595 local e=a.event;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
596 local n=a.event_base;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
597 local a=(e.core and e.core.LEAVE)or-1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
598 function t(o,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
599 local t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
600 t=n:addevent(nil,0,function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
601 local e=e(i());
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
602 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
603 return 0,e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
604 elseif t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
605 return a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
606 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
607 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
608 ,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
609 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
610 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
611 add_task=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
612 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
613 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
614 package.preload['util.termcolours']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
615 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
616 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
617 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
618 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
619 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
620 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
621 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
622 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
623 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
624 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
625 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
626 local n,i=table.concat,table.insert;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
627 local t,s=string.char,string.format;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
628 local h=tonumber;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
629 local c=ipairs;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
630 local l=io.write;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
631 local e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
632 if os.getenv("WINDIR")then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
633 e=require"util.windows";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
634 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
635 local o=e and e.get_consolecolor and e.get_consolecolor();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
636 a"termcolours"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
637 local u={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
638 reset=0;bright=1,dim=2,underscore=4,blink=5,reverse=7,hidden=8;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
639 black=30;red=31;green=32;yellow=33;blue=34;magenta=35;cyan=36;white=37;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
640 ["black background"]=40;["red background"]=41;["green background"]=42;["yellow background"]=43;["blue background"]=44;["magenta background"]=45;["cyan background"]=46;["white background"]=47;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
641 bold=1,dark=2,underline=4,underlined=4,normal=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
642 }
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
643 local d={
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
644 ["0"]=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
645 ["1"]=7+8,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
646 ["1;33"]=2+4+8,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
647 ["1;31"]=4+8
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
648 }
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
649 local r={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
650 [1]="font-weight: bold",[2]="opacity: 0.5",[4]="text-decoration: underline",[8]="visibility: hidden",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
651 [30]="color:black",[31]="color:red",[32]="color:green",[33]="color:#FFD700",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
652 [34]="color:blue",[35]="color: magenta",[36]="color:cyan",[37]="color: white",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
653 [40]="background-color:black",[41]="background-color:red",[42]="background-color:green",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
654 [43]="background-color:yellow",[44]="background-color:blue",[45]="background-color: magenta",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
655 [46]="background-color:cyan",[47]="background-color: white";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
656 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
657 local a=t(27).."[%sm%s"..t(27).."[0m";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
658 function getstring(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
659 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
660 return s(a,e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
661 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
662 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
663 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
664 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
665 function getstyle(...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
666 local e,t={...},{};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
667 for a,e in c(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
668 e=u[e];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
669 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
670 i(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
671 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
672 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
673 return n(t,";");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
674 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
675 local a="0";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
676 function setstyle(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
677 e=e or"0";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
678 if e~=a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
679 l("\27["..e.."m");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
680 a=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
681 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
682 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
683 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
684 function setstyle(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
685 t=t or"0";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
686 if t~=a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
687 e.set_consolecolor(d[t]or o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
688 a=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
689 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
690 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
691 if not o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
692 function setstyle(e)end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
693 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
694 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
695 local function a(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
696 if e=="0"then return"</span>";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
697 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
698 for e in e:gmatch("[^;]+")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
699 i(t,r[h(e)]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
700 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
701 return"</span><span style='"..n(t,";").."'>";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
702 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
703 function tohtml(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
704 return e:gsub("\027%[(.-)m",a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
705 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
706 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
707 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
708 package.preload['util.uuid']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
709 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
710 local function o(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
711 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
712 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
713 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
714 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
715 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
716 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
717 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
718 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
719 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
720 local n=tostring;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
721 local e=os.time;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
722 local a=os.clock;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
723 local i=require"util.hashes".sha1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
724 o"uuid"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
725 local t=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
726 local function o()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
727 local e=e();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
728 if t>=e then e=t+1;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
729 t=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
730 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
731 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
732 local function t(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
733 return i(e..a()..n({}),true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
734 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
735 local e=t(o());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
736 local function a(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
737 e=t(e..a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
738 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
739 local function t(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
740 if#e<t then a(o());end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
741 local a=e:sub(0,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
742 e=e:sub(t+1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
743 return a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
744 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
745 local function e()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
746 return("%x"):format(t(1):byte()%4+8);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
747 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
748 function generate()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
749 return t(8).."-"..t(4).."-4"..t(3).."-"..(e())..t(3).."-"..t(12);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
750 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
751 seed=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
752 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
753 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
754 package.preload['net.dns']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
755 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
756 local function c(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
757 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
758 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
759 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
760 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
761 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
762 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
763 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
764 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
765 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
766 local s=require"socket";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
767 local k=require"util.timer";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
768 local e,b=pcall(require,"util.windows");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
769 local _=(e and b)or os.getenv("WINDIR");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
770 local u,E,v,a,i=
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
771 coroutine,io,math,string,table;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
772 local m,h,o,f,r,p,x,q,t,e,z=
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
773 ipairs,next,pairs,print,setmetatable,tostring,assert,error,unpack,select,type;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
774 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
775 get=function(t,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
776 local a=e('#',...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
777 for a=1,a do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
778 t=t[e(a,...)];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
779 if t==nil then break;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
780 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
781 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
782 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
783 set=function(a,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
784 local n=e('#',...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
785 local s,o=e(n-1,...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
786 local t,i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
787 for n=1,n-2 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
788 local n=e(n,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
789 local e=a[n]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
790 if o==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
791 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
792 return;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
793 elseif h(e,h(e))then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
794 t=nil;i=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
795 elseif t==nil then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
796 t=a;i=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
797 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
798 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
799 e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
800 a[n]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
802 a=e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
804 if o==nil and t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
805 t[i]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
806 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
807 a[s]=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
808 return o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
809 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
810 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
811 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
812 local d,l=e.get,e.set;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
813 local j=15;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
814 c('dns')
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
815 local t=_M;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
816 local n=i.insert
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
817 local function c(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
818 return(e-(e%256))/256;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
819 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
820 local function y(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
821 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
822 for o,e in o(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
823 t[o]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
824 t[e]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
825 t[a.lower(e)]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
826 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
827 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
828 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
829 local function w(i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
830 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
831 for o,i in o(i)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
832 local t=a.char(c(o),o%256);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
833 e[o]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
834 e[i]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
835 e[a.lower(i)]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
836 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
837 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
838 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
839 t.types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
840 'A','NS','MD','MF','CNAME','SOA','MB','MG','MR','NULL','WKS',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
841 'PTR','HINFO','MINFO','MX','TXT',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
842 [28]='AAAA',[29]='LOC',[33]='SRV',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
843 [252]='AXFR',[253]='MAILB',[254]='MAILA',[255]='*'};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
844 t.classes={'IN','CS','CH','HS',[255]='*'};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
845 t.type=y(t.types);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
846 t.class=y(t.classes);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
847 t.typecode=w(t.types);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
848 t.classcode=w(t.classes);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
849 local function g(e,i,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
850 if a.byte(e,-1)~=46 then e=e..'.';end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
851 e=a.lower(e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
852 return e,t.type[i or'A'],t.class[o or'IN'];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
853 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
854 local function y(t,a,n)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
855 a=a or s.gettime();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
856 for o,e in m(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
857 if e.tod then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
858 e.ttl=v.floor(e.tod-a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
859 if e.ttl<=0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
860 t[e[e.type:lower()]]=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
861 i.remove(t,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
862 return y(t,a,n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
863 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
864 elseif n=='soft'then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
865 x(e.ttl==0);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
866 t[e[e.type:lower()]]=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
867 i.remove(t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
868 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
869 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
870 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
871 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
872 e.__index=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
873 e.timeout=j;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
874 local function j(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
875 local e=e.type and e[e.type:lower()];
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
876 if z(e)~="string"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
877 return"<UNKNOWN RDATA TYPE>";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
878 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
879 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
880 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
881 local w={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
882 LOC=e.LOC_tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
883 MX=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
884 return a.format('%2i %s',e.pref,e.mx);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
885 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
886 SRV=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
887 local e=e.srv;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
888 return a.format('%5d %5d %5d %s',e.priority,e.weight,e.port,e.target);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
889 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
890 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
891 local x={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
892 function x.__tostring(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
893 local t=(w[e.type]or j)(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
894 return a.format('%2s %-5s %6i %-28s %s',e.class,e.type,e.ttl,e.name,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
895 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
896 local j={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
897 function j.__tostring(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
898 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
899 for a,t in m(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
900 n(e,p(t)..'\n');
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
901 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
902 return i.concat(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
903 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
904 local w={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
905 function w.__tostring(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
906 local a=s.gettime();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
907 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
908 for i,e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
909 for i,e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
910 for o,e in o(e)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
911 y(e,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
912 n(t,p(e));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
913 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
914 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
915 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
916 return i.concat(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
917 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
918 function e:new()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
919 local t={active={},cache={},unsorted={}};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
920 r(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
921 r(t.cache,w);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
922 r(t.unsorted,{__mode='kv'});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
923 return t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
924 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
925 function t.random(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
926 v.randomseed(v.floor(1e4*s.gettime())%2147483648);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
927 t.random=v.random;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
928 return t.random(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
929 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
930 local function v(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
931 e=e or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
932 e.id=e.id or t.random(0,65535);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
933 e.rd=e.rd or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
934 e.tc=e.tc or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
935 e.aa=e.aa or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
936 e.opcode=e.opcode or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
937 e.qr=e.qr or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
938 e.rcode=e.rcode or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
939 e.z=e.z or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
940 e.ra=e.ra or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
941 e.qdcount=e.qdcount or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
942 e.ancount=e.ancount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
943 e.nscount=e.nscount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
944 e.arcount=e.arcount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
945 local t=a.char(
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
946 c(e.id),e.id%256,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
947 e.rd+2*e.tc+4*e.aa+8*e.opcode+128*e.qr,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
948 e.rcode+16*e.z+128*e.ra,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
949 c(e.qdcount),e.qdcount%256,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
950 c(e.ancount),e.ancount%256,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
951 c(e.nscount),e.nscount%256,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
952 c(e.arcount),e.arcount%256
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
953 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
954 return t,e.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
955 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
956 local function c(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
957 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
958 for t in a.gmatch(t,'[^.]+')do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
959 n(e,a.char(a.len(t)));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
960 n(e,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
961 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
962 n(e,a.char(0));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
963 return i.concat(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
964 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
965 local function z(o,a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
966 o=c(o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
967 a=t.typecode[a or'a'];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
968 e=t.classcode[e or'in'];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
969 return o..a..e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
970 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
971 function e:byte(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
972 e=e or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
973 local t=self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
974 local o=t+e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
975 if o>#self.packet then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
976 q(a.format('out of bounds: %i>%i',o,#self.packet));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
977 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
978 self.offset=t+e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
979 return a.byte(self.packet,t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
980 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
981 function e:word()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
982 local t,e=self:byte(2);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
983 return 256*t+e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
984 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
985 function e:dword()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
986 local o,t,a,e=self:byte(4);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
987 return 16777216*o+65536*t+256*a+e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
988 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
989 function e:sub(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
990 e=e or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
991 local t=a.sub(self.packet,self.offset,self.offset+e-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
992 self.offset=self.offset+e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
993 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
994 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
995 function e:header(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
996 local e=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
997 if not self.active[e]and not t then return nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
998 local e={id=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
999 local t,a=self:byte(2);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1000 e.rd=t%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1001 e.tc=t/2%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1002 e.aa=t/4%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1003 e.opcode=t/8%16;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1004 e.qr=t/128;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1005 e.rcode=a%16;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1006 e.z=a/16%8;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1007 e.ra=a/128;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1008 e.qdcount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1009 e.ancount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1010 e.nscount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1011 e.arcount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1012 for a,t in o(e)do e[a]=t-t%1;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1013 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1014 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1015 function e:name()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1016 local a,t=nil,0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1017 local e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1018 local o={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1019 if e==0 then return"."end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1020 while e>0 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1021 if e>=192 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1022 t=t+1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1023 if t>=20 then q('dns error: 20 pointers');end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1024 local e=((e-192)*256)+self:byte();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1025 a=a or self.offset;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1026 self.offset=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1027 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1028 n(o,self:sub(e)..'.');
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1029 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1030 e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1031 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1032 self.offset=a or self.offset;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1033 return i.concat(o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1034 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1035 function e:question()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1036 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1037 e.name=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1038 e.type=t.type[self:word()];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1039 e.class=t.class[self:word()];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1040 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1041 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1042 function e:A(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1043 local o,t,n,i=self:byte(4);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1044 e.a=a.format('%i.%i.%i.%i',o,t,n,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1045 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1046 function e:AAAA(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1047 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1048 for t=1,a.rdlength,2 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1049 local t,a=self:byte(2);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1050 i.insert(e,("%02x%02x"):format(t,a));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1051 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1052 e=i.concat(e,":"):gsub("%f[%x]0+(%x)","%1");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1053 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1054 for e in e:gmatch(":[0:]+:")do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1055 i.insert(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1056 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1057 if#t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1058 a.aaaa=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1059 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1060 elseif#t>1 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1061 i.sort(t,function(t,e)return#t>#e end);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1062 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1063 a.aaaa=e:gsub(t[1],"::",1):gsub("^0::","::"):gsub("::0$","::");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1064 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1065 function e:CNAME(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1066 e.cname=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1067 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1068 function e:MX(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1069 e.pref=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1070 e.mx=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1071 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1072 function e:LOC_nibble_power()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1073 local e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1074 return((e-(e%16))/16)*(10^(e%16));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1075 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1076 function e:LOC(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1077 e.version=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1078 if e.version==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1079 e.loc=e.loc or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1080 e.loc.size=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1081 e.loc.horiz_pre=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1082 e.loc.vert_pre=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1083 e.loc.latitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1084 e.loc.longitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1085 e.loc.altitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1086 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1087 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1088 local function c(e,i,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1089 e=e-2147483648;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1090 if e<0 then i=t;e=-e;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1091 local n,o,t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1092 t=e%6e4;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1093 e=(e-t)/6e4;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1094 o=e%60;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1095 n=(e-o)/60;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1096 return a.format('%3d %2d %2.3f %s',n,o,t/1e3,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1097 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1098 function e.LOC_tostring(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1099 local t={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1100 n(t,a.format(
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1101 '%s %s %.2fm %.2fm %.2fm %.2fm',
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1102 c(e.loc.latitude,'N','S'),
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1103 c(e.loc.longitude,'E','W'),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1104 (e.loc.altitude-1e7)/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1105 e.loc.size/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1106 e.loc.horiz_pre/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1107 e.loc.vert_pre/100
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1108 ));
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1109 return i.concat(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1110 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1111 function e:NS(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1112 e.ns=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1113 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1114 function e:SOA(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1115 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1116 function e:SRV(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1117 e.srv={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1118 e.srv.priority=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1119 e.srv.weight=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1120 e.srv.port=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1121 e.srv.target=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1123 function e:PTR(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1124 e.ptr=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1125 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1126 function e:TXT(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1127 e.txt=self:sub(self:byte());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1128 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1129 function e:rr()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1130 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1131 r(e,x);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1132 e.name=self:name(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1133 e.type=t.type[self:word()]or e.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1134 e.class=t.class[self:word()]or e.class;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1135 e.ttl=65536*self:word()+self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1136 e.rdlength=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1137 if e.ttl<=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1138 e.tod=self.time+30;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1139 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1140 e.tod=self.time+e.ttl;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1141 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1142 local a=self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1143 local t=self[t.type[e.type]];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1144 if t then t(self,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1145 self.offset=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1146 e.rdata=self:sub(e.rdlength);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1147 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1148 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1149 function e:rrs(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1150 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1151 for t=1,t do n(e,self:rr());end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1152 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1153 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1154 function e:decode(t,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1155 self.packet,self.offset=t,1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1156 local t=self:header(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1157 if not t then return nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1158 local t={header=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1159 t.question={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1160 local i=self.offset;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1161 for e=1,t.header.qdcount do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1162 n(t.question,self:question());
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1163 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1164 t.question.raw=a.sub(self.packet,i,self.offset-1);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1165 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1166 if not self.active[t.header.id]or not self.active[t.header.id][t.question.raw]then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1167 self.active[t.header.id]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1168 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1169 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1170 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1171 t.answer=self:rrs(t.header.ancount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1172 t.authority=self:rrs(t.header.nscount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1173 t.additional=self:rrs(t.header.arcount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1174 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1176 e.delays={1,3};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1177 function e:addnameserver(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1178 self.server=self.server or{};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1179 n(self.server,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1180 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1181 function e:setnameserver(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1182 self.server={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1183 self:addnameserver(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1184 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1185 function e:adddefaultnameservers()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1186 if _ then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1187 if b and b.get_nameservers then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1188 for t,e in m(b.get_nameservers())do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1189 self:addnameserver(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1190 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1191 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1192 if not self.server or#self.server==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1193 self:addnameserver("208.67.222.222");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1194 self:addnameserver("208.67.220.220");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1195 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1196 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1197 local e=E.open("/etc/resolv.conf");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1198 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1199 for e in e:lines()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1200 e=e:gsub("#.*$","")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1201 :match('^%s*nameserver%s+(.*)%s*$');
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1202 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1203 e:gsub("%f[%d.](%d+%.%d+%.%d+%.%d+)%f[^%d.]",function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1204 self:addnameserver(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1205 end);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1206 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1207 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1209 if not self.server or#self.server==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1210 self:addnameserver("127.0.0.1");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1211 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1212 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1213 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1214 function e:getsocket(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1215 self.socket=self.socket or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1216 self.socketset=self.socketset or{};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1217 local e=self.socket[o];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1218 if e then return e;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1219 local a,t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1220 e,t=s.udp();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1221 if e and self.socket_wrapper then e,t=self.socket_wrapper(e,self);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1222 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1223 return nil,t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1224 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1225 e:settimeout(0);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1226 self.socket[o]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1227 self.socketset[e]=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1228 a,t=e:setsockname('*',0);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1229 if not a then return self:servfail(e,t);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1230 a,t=e:setpeername(self.server[o],53);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1231 if not a then return self:servfail(e,t);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1232 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1233 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1234 function e:voidsocket(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1235 if self.socket[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1236 self.socketset[self.socket[e]]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1237 self.socket[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1238 elseif self.socketset[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1239 self.socket[self.socketset[e]]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1240 self.socketset[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1241 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1242 e:close();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1244 function e:socket_wrapper_set(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1245 self.socket_wrapper=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1246 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1247 function e:closeall()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1248 for t,e in m(self.socket)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1249 self.socket[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1250 self.socketset[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1251 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1253 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1254 function e:remember(e,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1255 local a,o,i=g(e.name,e.type,e.class);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1256 if t~='*'then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1257 t=o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1258 local t=d(self.cache,i,'*',a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1259 if t then n(t,e);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1260 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1261 self.cache=self.cache or r({},w);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1262 local a=d(self.cache,i,t,a)or
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1263 l(self.cache,i,t,a,r({},j));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1264 if not a[e[o:lower()]]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1265 a[e[o:lower()]]=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1266 n(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1267 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1268 if t=='MX'then self.unsorted[a]=true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1269 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1270 local function c(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1271 return(e.pref==t.pref)and(e.mx<t.mx)or(e.pref<t.pref);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1272 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1273 function e:peek(o,a,t,n)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1274 o,a,t=g(o,a,t);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1275 local e=d(self.cache,t,a,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1276 if not e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1277 if n then if n<=0 then return end else n=3 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1278 e=d(self.cache,t,"CNAME",o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1279 if not(e and e[1])then return end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1280 return self:peek(e[1].cname,a,t,n-1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1281 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1282 if y(e,s.gettime())and a=='*'or not h(e)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1283 l(self.cache,t,a,o,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1284 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1285 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1286 if self.unsorted[e]then i.sort(e,c);self.unsorted[e]=nil;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1287 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1289 function e:purge(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1290 if e=='soft'then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1291 self.time=s.gettime();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1292 for t,e in o(self.cache or{})do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1293 for t,e in o(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1294 for t,e in o(e)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1295 y(e,self.time,'soft')
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1296 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1297 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1298 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1299 else self.cache=r({},w);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1300 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1301 function e:query(e,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1302 e,a,t=g(e,a,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1303 local n=u.running();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1304 local o=d(self.wanted,t,a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1305 if n and o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1306 l(self.wanted,t,a,e,n,true);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1307 return true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1308 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1309 if not self.server then self:adddefaultnameservers();end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1310 local h=z(e,a,t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1311 local o=self:peek(e,a,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1312 if o then return o;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1313 local o,i=v();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1314 local o={
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1315 packet=o..h,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1316 server=self.best_server,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1317 delay=1,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1318 retry=s.gettime()+self.delays[1]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1319 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1320 self.active[i]=self.active[i]or{};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1321 self.active[i][h]=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1322 if n then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1323 l(self.wanted,t,a,e,n,true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1324 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1325 local i,h=self:getsocket(o.server)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1326 if not i then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1327 return nil,h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1328 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1329 i:send(o.packet)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1330 if k and self.timeout then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1331 local r=#self.server;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1332 local s=1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1333 k.add_task(self.timeout,function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1334 if d(self.wanted,t,a,e,n)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1335 if s<r then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1336 s=s+1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1337 self:servfail(i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1338 o.server=self.best_server;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1339 i,h=self:getsocket(o.server);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1340 if i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1341 i:send(o.packet);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1342 return self.timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1343 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1344 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1345 self:cancel(t,a,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1346 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1347 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1349 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1350 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1351 function e:servfail(t,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1352 local n=self.socketset[t]
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1353 t=self:voidsocket(t);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1354 self.time=s.gettime();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1355 for s,a in o(self.active)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1356 for o,e in o(a)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1357 if e.server==n then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1358 e.server=e.server+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1359 if e.server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1360 e.server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1361 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1362 e.retries=(e.retries or 0)+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1363 if e.retries>=#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1364 a[o]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1365 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1366 t,i=self:getsocket(e.server);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1367 if t then t:send(e.packet);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1368 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1370 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1371 if h(a)==nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1372 self.active[s]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1373 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1374 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1375 if n==self.best_server then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1376 self.best_server=self.best_server+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1377 if self.best_server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1378 self.best_server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1379 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1380 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1381 return t,i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1382 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1383 function e:settimeout(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1384 self.timeout=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1385 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1386 function e:receive(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1387 self.time=s.gettime();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1388 t=t or self.socket;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1389 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1390 for a,t in o(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1391 if self.socketset[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1392 local t=t:receive();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1393 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1394 e=self:decode(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1395 if e and self.active[e.header.id]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1396 and self.active[e.header.id][e.question.raw]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1397 for a,t in o(e.answer)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1398 self:remember(t,e.question[1].type)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1400 local t=self.active[e.header.id];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1401 t[e.question.raw]=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1402 if not h(t)then self.active[e.header.id]=nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1403 if not h(self.active)then self:closeall();end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1404 local e=e.question[1];
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1405 local t=d(self.wanted,e.class,e.type,e.name);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1406 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1407 for e in o(t)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1408 if u.status(e)=="suspended"then u.resume(e);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1409 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1410 l(self.wanted,e.class,e.type,e.name,nil);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1411 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1412 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1413 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1414 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1415 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1416 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1417 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1418 function e:feed(a,t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1419 self.time=s.gettime();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1420 local e=self:decode(t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1421 if e and self.active[e.header.id]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1422 and self.active[e.header.id][e.question.raw]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1423 for a,t in o(e.answer)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1424 self:remember(t,e.question[1].type);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1425 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1426 local t=self.active[e.header.id];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1427 t[e.question.raw]=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1428 if not h(t)then self.active[e.header.id]=nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1429 if not h(self.active)then self:closeall();end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1430 local e=e.question[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1431 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1432 local t=d(self.wanted,e.class,e.type,e.name);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1433 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1434 for e in o(t)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1435 if u.status(e)=="suspended"then u.resume(e);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1436 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1437 l(self.wanted,e.class,e.type,e.name,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1438 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1439 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1440 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1441 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1442 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1443 function e:cancel(t,a,i)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1444 local e=d(self.wanted,t,a,i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1445 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1446 for e in o(e)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1447 if u.status(e)=="suspended"then u.resume(e);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1448 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1449 l(self.wanted,t,a,i,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1450 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1452 function e:pulse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1453 while self:receive()do end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1454 if not h(self.active)then return nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1455 self.time=s.gettime();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1456 for a,t in o(self.active)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1457 for o,e in o(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1458 if self.time>=e.retry then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1459 e.server=e.server+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1460 if e.server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1461 e.server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1462 e.delay=e.delay+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1463 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1464 if e.delay>#self.delays then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1465 t[o]=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1466 if not h(t)then self.active[a]=nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1467 if not h(self.active)then return nil;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1468 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1469 local t=self.socket[e.server];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1470 if t then t:send(e.packet);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1471 e.retry=self.time+self.delays[e.delay];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1474 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1475 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1476 if h(self.active)then return true;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1477 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1478 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1479 function e:lookup(a,e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1480 self:query(a,e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1481 while self:pulse()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1482 local e={}
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1483 for t,a in m(self.socket)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1484 e[t]=a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1485 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1486 s.select(e,nil,4)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1487 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1488 return self:peek(a,e,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1489 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1490 function e:lookupex(o,a,t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1491 return self:peek(a,t,e)or self:query(a,t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1492 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1493 function e:tohostname(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1494 return t.lookup(e:gsub("(%d+)%.(%d+)%.(%d+)%.(%d+)","%4.%3.%2.%1.in-addr.arpa."),"PTR");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1495 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1496 local i={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1497 qr={[0]='query','response'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1498 opcode={[0]='query','inverse query','server status request'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1499 aa={[0]='non-authoritative','authoritative'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1500 tc={[0]='complete','truncated'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1501 rd={[0]='recursion not desired','recursion desired'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1502 ra={[0]='recursion not available','recursion available'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1503 z={[0]='(reserved)'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1504 rcode={[0]='no error','format error','server failure','name error','not implemented'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1505 type=t.type,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1506 class=t.class
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1507 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1508 local function s(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1509 return(i[e]and i[e][t[e]])or'';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1510 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1511 function e.print(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1512 for o,e in o{'id','qr','opcode','aa','tc','rd','ra','z',
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1513 'rcode','qdcount','ancount','nscount','arcount'}do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1514 f(a.format('%-30s','header.'..e),t.header[e],s(t.header,e));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1515 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1516 for e,t in m(t.question)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1517 f(a.format('question[%i].name ',e),t.name);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1518 f(a.format('question[%i].type ',e),t.type);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1519 f(a.format('question[%i].class ',e),t.class);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1520 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1521 local r={name=1,type=1,class=1,ttl=1,rdlength=1,rdata=1};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1522 local e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1523 for n,i in o({'answer','authority','additional'})do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1524 for h,n in o(t[i])do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1525 for o,t in o({'name','type','class','ttl','rdlength'})do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1526 e=a.format('%s[%i].%s',i,h,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1527 f(a.format('%-30s',e),n[t],s(n,t));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1528 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1529 for t,o in o(n)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1530 if not r[t]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1531 e=a.format('%s[%i].%s',i,h,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1532 f(a.format('%-30s %s',p(e),p(o)));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1533 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1534 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1535 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1537 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1538 function t.resolver()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1539 local t={active={},cache={},unsorted={},wanted={},best_server=1};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1540 r(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1541 r(t.cache,w);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1542 r(t.unsorted,{__mode='kv'});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1543 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1544 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1545 local e=t.resolver();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1546 t._resolver=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1547 function t.lookup(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1548 return e:lookup(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1549 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1550 function t.tohostname(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1551 return e:tohostname(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1552 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1553 function t.purge(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1554 return e:purge(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1556 function t.peek(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1557 return e:peek(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1558 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1559 function t.query(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1560 return e:query(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1561 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1562 function t.feed(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1563 return e:feed(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1564 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1565 function t.cancel(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1566 return e:cancel(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1567 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1568 function t.settimeout(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1569 return e:settimeout(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1570 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1571 function t.cache()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1572 return e.cache;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1573 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1574 function t.socket_wrapper_set(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1575 return e:socket_wrapper_set(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1576 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1577 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1578 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1579 package.preload['net.adns']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1580 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1581 local function o(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1582 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1583 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1584 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1585 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1586 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1587 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1588 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1589 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1590 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1591 local c=require"net.server";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1592 local a=require"net.dns";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1593 local t=require"util.logger".init("adns");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1594 local e,e=table.insert,table.remove;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1595 local n,h,l=coroutine,tostring,pcall;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1596 local function u(a,a,t,e)return(e-t)+1;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1597 o"adns"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1598 function lookup(d,e,s,r)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1599 return n.wrap(function(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1600 if o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1601 t("debug","Records for %s already cached, using those...",e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1602 d(o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1603 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1604 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1605 t("debug","Records for %s not in cache, sending query (%s)...",e,h(n.running()));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1606 local i,o=a.query(e,s,r);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1607 if i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1608 n.yield({r or"IN",s or"A",e,n.running()});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1609 t("debug","Reply for %s (%s)",e,h(n.running()));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1610 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1611 if i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1612 i,o=l(d,a.peek(e,s,r));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1613 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1614 t("error","Error sending DNS query: %s",o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1615 i,o=l(d,nil,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1616 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1617 if not i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1618 t("error","Error in DNS response handler: %s",h(o));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1619 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1620 end)(a.peek(e,s,r));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1621 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1622 function cancel(e,o,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1623 t("warn","Cancelling DNS lookup for %s",h(e[3]));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1624 a.cancel(e[1],e[2],e[3],e[4],o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1625 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1626 function new_async_socket(i,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1627 local n="<unknown>";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1628 local s={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1629 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1630 local h;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1631 function s.onincoming(o,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1632 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1633 a.feed(e,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1634 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1635 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1636 function s.ondisconnect(a,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1637 if i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1638 t("warn","DNS socket for %s disconnected: %s",n,i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1639 local e=o.server;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1640 if o.socketset[a]==o.best_server and o.best_server==#e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1641 t("error","Exhausted all %d configured DNS servers, next lookup will try %s again",#e,e[1]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1642 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1643 o:servfail(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1644 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1645 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1646 e,h=c.wrapclient(i,"dns",53,s);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1647 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1648 return nil,h;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1649 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1650 e.settimeout=function()end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1651 e.setsockname=function(t,...)return i:setsockname(...);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1652 e.setpeername=function(o,...)n=(...);local a,t=i:setpeername(...);o:set_send(u);return a,t;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1653 e.connect=function(t,...)return i:connect(...)end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1654 e.send=function(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1655 t("debug","Sending DNS query to %s",n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1656 return i:send(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1657 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1658 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1659 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1660 a.socket_wrapper_set(new_async_socket);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1661 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1662 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1663 package.preload['net.server']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1664 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1665 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1666 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1667 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1668 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1669 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1670 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1671 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1672 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1673 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1674 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1675 local m=function(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1676 return _G[e]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1677 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1678 local W,e=require("util.logger").init("socket"),table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1679 local n=function(...)return W("debug",e{...});end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1680 local E=function(...)return W("warn",e{...});end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1681 local ce=1
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1682 local f=m"type"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1683 local b=m"pairs"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1684 local ue=m"ipairs"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1685 local y=m"tonumber"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1686 local l=m"tostring"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1687 local t=m"table"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1688 local a=m"string"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1689 local e=m"coroutine"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1690 local Y=math.min
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1691 local re=math.huge
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1692 local pe=t.concat
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1693 local he=t.insert
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1694 local we=a.sub
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1695 local fe=e.wrap
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1696 local me=e.yield
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1697 local O,e=pcall(require,"ssl")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1698 local g=m"socket"or require"socket"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1699 local F=g.gettime
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1700 local ee=g.dns.getaddrinfo
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1701 local ye=(O and e.wrap)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1702 local te=g.bind
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1703 local ve=g.select
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1704 local I
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1705 local B
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1706 local ae
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1707 local G
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1708 local J
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1709 local u
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1710 local ie
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1711 local X
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1712 local se
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1713 local ne
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1714 local oe
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1715 local Q
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1716 local s
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1717 local le
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1718 local Z
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1719 local de
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1720 local p
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1721 local i
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1722 local P
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1723 local r
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1724 local h
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1725 local T
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1726 local v
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1727 local w
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1728 local k
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1729 local x
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1730 local a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1731 local o
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1732 local q
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1733 local C
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1734 local M
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1735 local A
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1736 local j
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1737 local N
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1738 local K
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1739 local d
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1740 local H
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1741 local S
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1742 local R
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1743 local D
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1744 local L
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1745 local z
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1746 local _
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1747 local U
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1748 p={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1749 i={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1750 r={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1751 P={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1752 h={}
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1753 v={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1754 w={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1755 T={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1756 k={}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1757 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1758 o=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1759 q=0
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1760 C=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1761 M=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1762 A=1
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1763 j=128
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1764 N=10
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1765 H=51e3*1024
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1766 S=25e3*1024
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1767 R=30
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1768 D=6e4
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1769 L=14*60
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1770 local e=package.config:sub(1,1)=="\\"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1771 _=(e and math.huge)or g._SETSIZE or 1024
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1772 z=g._SETSIZE or 1024
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1773 U=30
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1774 ne=function(y,t,m,c,g,w)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1775 if t:getfd()>=_ then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1776 E("server.lua: Disallowed FD number: "..t:getfd())
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1777 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1778 return nil,"fd-too-large"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1779 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1780 local f=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1781 local v,e=y.onconnect,y.ondisconnect
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1782 local b=t.accept
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1783 local e={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1784 e.shutdown=function()end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1785 e.ssl=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1786 return w~=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1787 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1788 e.sslctx=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1789 return w
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1790 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1791 e.remove=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1792 f=f-1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1793 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1794 e.resume()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1795 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1796 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1797 e.close=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1798 t:close()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1799 o=s(r,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1800 a=s(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1801 p[m..":"..c]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1802 h[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1803 e=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1804 t=nil
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1805 n"server.lua: closed server handler and removed sockets from list"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1806 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1807 e.pause=function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1808 if not e.paused then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1809 a=s(i,t,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1810 if o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1811 h[t]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1812 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1813 t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1814 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1815 e.paused=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1816 n("server.lua: server [",m,"]:",c," paused")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1817 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1818 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1819 e.resume=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1820 if e.paused then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1821 if not t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1822 t=te(m,c,j);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1823 t:settimeout(0)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1824 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1825 a=u(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1826 h[t]=e
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1827 k[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1828 e.paused=false;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1829 n("server.lua: server [",m,"]:",c," resumed")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1830 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1831 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1832 e.ip=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1833 return m
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1834 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1835 e.serverport=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1836 return c
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1837 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1838 e.socket=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1839 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1840 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1841 e.readbuffer=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1842 if a>=z or o>=z then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1843 e.pause()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1844 k[e]=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1845 n("server.lua: refused new client connection: server full")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1846 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1847 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1848 local t,o=b(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1849 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1850 local o,a=t:getpeername()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1851 local t,i,e=Z(e,y,t,o,c,a,g,w)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1852 if e then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1853 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1854 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1855 f=f+1
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1856 n("server.lua: accepted new client connection from ",l(o),":",l(a)," to ",l(c))
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1857 if v and not w then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1858 return v(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1859 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1860 return;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1861 elseif o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1862 n("server.lua: error with new client connection: ",l(o))
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1863 e.pause()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1864 k[e]=d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1865 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1866 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1867 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1868 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1869 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1870 Z=function(p,f,t,z,K,A,N,g)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1871 if t:getfd()>=_ then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1872 E("server.lua: Disallowed FD number: "..t:getfd())
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1873 t:close()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1874 if p then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1875 k[p]=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1876 p.pause()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1877 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1878 return nil,nil,"fd-too-large"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1879 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1880 t:settimeout(0)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1881 local y
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1882 local _
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1883 local q
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1884 local V
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1885 local P=f.onincoming
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1886 local Y=f.onstatus
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1887 local k=f.ondisconnect
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1888 local D=f.ondrain
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1889 local Q=f.onreadtimeout;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1890 local R=f.ondetach
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1891 local b={}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1892 local c=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1893 local B
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1894 local L
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1895 local m=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1896 local j=false
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1897 local E=false
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1898 local W,F=0,0
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1899 local H=H
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1900 local S=S
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1901 local e=b
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1902 e.dispatch=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1903 return P
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1904 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1905 e.disconnect=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1906 return k
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1907 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1908 e.onreadtimeout=Q;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1909 e.setlistener=function(a,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1910 if R then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1911 R(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1912 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1913 P=t.onincoming
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1914 k=t.ondisconnect
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1915 Y=t.onstatus
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1916 D=t.ondrain
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1917 e.onreadtimeout=t.onreadtimeout
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1918 R=t.ondetach
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1919 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1920 e.getstats=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1921 return F,W
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1922 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1923 e.ssl=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1924 return V
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1925 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1926 e.sslctx=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1927 return g
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1928 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1929 e.send=function(n,o,a,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1930 return y(t,o,a,i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1931 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1932 e.receive=function(o,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1933 return _(t,o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1934 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1935 e.shutdown=function(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1936 return q(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1937 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1938 e.setoption=function(i,a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1939 if t.setoption then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1940 return t:setoption(a,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1941 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1942 return false,"setoption not implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1943 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1944 e.force_close=function(t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1945 if c~=0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1946 n("server.lua: discarding unwritten data for ",l(z),":",l(A))
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1947 c=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1948 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1949 return t:close(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1950 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1951 e.close=function(l,d)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1952 if not e then return true;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1953 a=s(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1954 v[e]=nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1955 if c~=0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1956 e.sendbuffer()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1957 if c~=0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1958 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1959 e.write=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1960 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1961 B=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1962 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1963 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1965 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1966 x=q and q(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1967 t:close()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1968 o=s(r,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1969 h[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1970 t=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1971 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1972 n"server.lua: socket already closed"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1973 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1974 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1975 w[e]=nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1976 T[e]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1977 local t=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1978 e=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1979 if k then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1980 k(t,d or false);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1981 k=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1982 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1983 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1984 if p then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1985 p.remove()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1986 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1987 n"server.lua: closed client handler and removed socket from list"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1988 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1989 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1990 e.server=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1991 return p
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1992 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1993 e.ip=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1994 return z
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1995 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1996 e.serverport=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1997 return K
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1998 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1999 e.clientport=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2000 return A
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2001 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2002 e.port=e.clientport
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2003 local p=function(i,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2004 if not e then return false end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2005 m=m+#a
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2006 if m>H then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2007 T[e]="send buffer exceeded"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2008 e.write=G
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2009 return false
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2010 elseif t and not r[t]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2011 o=u(r,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2012 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2013 c=c+1
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2014 b[c]=a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2015 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2016 w[e]=w[e]or d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2017 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2018 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2019 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2020 e.write=p
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2021 e.bufferqueue=function(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2022 return b
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2023 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2024 e.socket=function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2025 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2026 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2027 e.set_mode=function(a,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2028 N=t or N
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2029 return N
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2030 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2031 e.set_send=function(a,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2032 y=t or y
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2033 return y
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2034 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2035 e.bufferlen=function(o,a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2036 H=t or H
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2037 S=a or S
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2038 return m,S,H
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2039 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2040 e.lock_read=function(n,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2041 if o==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2042 local o=a
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2043 a=s(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2044 v[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2045 if a~=o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2046 j=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2047 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2048 elseif o==false then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2049 if j then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2050 j=false
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2051 a=u(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2052 v[e]=d
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2053 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2054 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2055 return j
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2056 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2057 e.pause=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2058 return t:lock_read(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2059 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2060 e.resume=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2061 return t:lock_read(false);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2062 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2063 e.lock=function(i,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2064 e.lock_read(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2065 if a==true then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2066 e.write=G
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2067 local a=o
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2068 o=s(r,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2069 w[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2070 if o~=a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2071 E=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2072 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2073 elseif a==false then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2074 e.write=p
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2075 if E then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2076 E=false
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2077 p("")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2078 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2079 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2080 return j,E
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2081 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2082 local p=function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2083 local a,t,o=_(t,N)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2084 if not t or(t=="wantread"or t=="timeout")then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2085 local o=a or o or""
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2086 local a=#o
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2087 if a>S then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2088 e:close("receive buffer exceeded")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2089 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2090 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2091 local a=a*ce
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2092 F=F+a
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2093 M=M+a
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2094 v[e]=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2095 return P(e,o,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2096 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2097 n("server.lua: client ",l(z),":",l(A)," read error: ",l(t))
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2098 x=e and e:force_close(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2099 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2100 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2101 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2102 local v=function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2103 local f,a,h,i,u;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2104 if t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2105 i=pe(b,"",1,c)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2106 f,a,h=y(t,i,1,m)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2107 u=(f or h or 0)*ce
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2108 W=W+u
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2109 C=C+u
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2110 for e=c,1,-1 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2111 b[e]=nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2112 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2113 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2114 f,a,u=false,"unexpected close",0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2115 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2116 if f then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2117 c=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2118 m=0
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2119 o=s(r,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2120 w[e]=nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2121 if D then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2122 D(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2123 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2124 x=L and e:starttls(nil)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2125 x=B and e:force_close()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2126 return true
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2127 elseif h and(a=="timeout"or a=="wantwrite")then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2128 i=we(i,h+1,m)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2129 b[1]=i
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2130 c=1
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2131 m=m-h
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2132 w[e]=d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2133 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2134 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2135 n("server.lua: client ",l(z),":",l(A)," write error: ",l(a))
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2136 x=e and e:force_close(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2137 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2138 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2139 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2140 local d;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2141 function e.set_sslctx(w,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2142 g=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2143 local m,l
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2144 d=fe(function(h)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2145 local t
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2146 for d=1,U do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2147 o=(l and s(r,h,o))or o
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2148 a=(m and s(i,h,a))or a
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2149 m,l=nil,nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2150 d,t=h:dohandshake()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2151 if not t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2152 n("server.lua: ssl handshake done")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2153 e.readbuffer=p
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2154 e.sendbuffer=v
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2155 d=Y and Y(e,"ssl-handshake-complete")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2156 if w.autostart_ssl and f.onconnect then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2157 f.onconnect(w);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2158 if c~=0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2159 o=u(r,h,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2160 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2161 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2162 a=u(i,h,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2163 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2164 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2165 if t=="wantwrite"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2166 o=u(r,h,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2167 l=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2168 elseif t=="wantread"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2169 a=u(i,h,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2170 m=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2171 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2172 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2173 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2174 t=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2175 me()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2176 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2177 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2178 t="ssl handshake error: "..(t or"handshake too long");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2179 n("server.lua: ",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2180 x=e and e:force_close(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2181 return false,t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2182 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2183 )
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2184 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2185 if O then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2186 e.starttls=function(f,m)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2187 if m then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2188 e:set_sslctx(m);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2189 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2190 if c>0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2191 n"server.lua: we need to do tls, but delaying until send buffer empty"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2192 L=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2193 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2194 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2195 n("server.lua: attempting to start tls on "..l(t))
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2196 local c,m=t
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2197 t,m=ye(t,g)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2198 if not t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2199 n("server.lua: error while starting tls on client: ",l(m or"unknown error"))
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2200 return nil,m
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2201 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2202 t:settimeout(0)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2203 y=t.send
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2204 _=t.receive
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2205 q=I
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2206 h[t]=e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2207 a=u(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2208 a=s(i,c,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2209 o=s(r,c,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2210 h[c]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2211 e.starttls=nil
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2212 L=nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2213 V=true
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2214 e.readbuffer=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2215 e.sendbuffer=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2216 return d(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2217 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2218 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2219 e.readbuffer=p
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2220 e.sendbuffer=v
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2221 y=t.send
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2222 _=t.receive
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2223 q=(V and I)or t.shutdown
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2224 h[t]=e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2225 a=u(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2226 if g and O then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2227 n"server.lua: auto-starting ssl negotiation..."
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2228 e.autostart_ssl=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2229 local t,e=e:starttls(g);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2230 if t==false then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2231 return nil,nil,e
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2232 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2233 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2234 return e,t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2235 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2236 I=function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2237 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2238 G=function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2239 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2240 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2241 u=function(t,a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2242 if not t[a]then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2243 e=e+1
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2244 t[e]=a
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2245 t[a]=e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2246 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2247 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2248 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2249 s=function(e,i,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2250 local a=e[i]
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2251 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2252 e[i]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2253 local o=e[t]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2254 e[t]=nil
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2255 if o~=i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2256 e[o]=a
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2257 e[a]=o
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2258 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2259 return t-1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2260 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2261 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2262 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2263 Q=function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2264 o=s(r,e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2265 a=s(i,e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2266 h[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2267 e:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2268 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2269 local function x(e,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2270 local a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2271 local i=t.sendbuffer;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2272 function t.sendbuffer()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2273 i();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2274 if a and t.bufferlen()<o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2275 e:lock_read(false);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2276 a=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2277 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2278 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2279 local i=e.readbuffer;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2280 function e.readbuffer()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2281 i();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2282 if not a and t.bufferlen()>=o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2283 a=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2284 e:lock_read(true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2285 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2286 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2287 e:set_mode("*a");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2288 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2289 ie=function(t,e,d,l,r)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2290 t=t or"*"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2291 local o
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2292 if f(d)~="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2293 o="invalid listener table"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2294 elseif f(t)~="string"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2295 o="invalid address"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2296 elseif f(e)~="number"or not(e>=0 and e<=65535)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2297 o="invalid port"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2298 elseif p[t..":"..e]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2299 o="listeners on '["..t.."]:"..e.."' already exist"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2300 elseif r and not O then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2301 o="luasec not found"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2302 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2303 if o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2304 E("server.lua, [",t,"]:",e,": ",o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2305 return nil,o
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2306 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2307 local o,s=te(t,e,j)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2308 if s then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2309 E("server.lua, [",t,"]:",e,": ",s)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2310 return nil,s
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2311 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2312 local s,d=ne(d,o,t,e,l,r)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2313 if not s then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2314 o:close()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2315 return nil,d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2317 o:settimeout(0)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2318 a=u(i,o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2319 p[t..":"..e]=s
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2320 h[o]=s
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2321 n("server.lua: new "..(r and"ssl "or"").."server listener on '[",t,"]:",e,"'")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2322 return s
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2323 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2324 se=function(t,e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2325 return p[t..":"..e];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2326 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2327 le=function(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2328 local a=p[t..":"..e]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2329 if not a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2330 return nil,"no server found on '["..t.."]:"..l(e).."'"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2331 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2332 a:close()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2333 p[t..":"..e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2334 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2335 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2336 J=function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2337 for e,t in b(h)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2338 t:close()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2339 h[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2340 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2341 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2342 o=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2343 q=0
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2344 p={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2345 i={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2346 r={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2347 P={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2348 h={}
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2349 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2350 oe=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2351 return{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2352 select_timeout=A;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2353 tcp_backlog=j;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2354 max_send_buffer_size=H;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2355 max_receive_buffer_size=S;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2356 select_idle_check_interval=R;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2357 send_timeout=D;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2358 read_timeout=L;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2359 max_connections=z;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2360 max_ssl_handshake_roundtrips=U;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2361 highest_allowed_fd=_;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2362 accept_retry_interval=N;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2363 }
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2364 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2365 de=function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2366 if f(e)~="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2367 return nil,"invalid settings table"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2368 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2369 A=y(e.select_timeout)or A
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2370 H=y(e.max_send_buffer_size)or H
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2371 S=y(e.max_receive_buffer_size)or S
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2372 R=y(e.select_idle_check_interval)or R
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2373 j=y(e.tcp_backlog)or j
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2374 D=y(e.send_timeout)or D
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2375 L=y(e.read_timeout)or L
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2376 N=y(e.accept_retry_interval)or N
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2377 z=e.max_connections or z
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2378 U=e.max_ssl_handshake_roundtrips or U
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2379 _=e.highest_allowed_fd or _
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2380 return true
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2381 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2382 X=function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2383 if f(e)~="function"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2384 return nil,"invalid listener function"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2385 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2386 q=q+1
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2387 P[q]=e
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2388 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2389 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2390 local l do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2391 local a={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2392 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2393 function l(t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2394 local o=F();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2395 t=t+o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2396 if t>=o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2397 he(e,{t,a});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2398 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2399 local e=a(o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2400 if e and f(e)=="number"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2401 return l(e,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2402 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2403 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2404 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2405 X(function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2406 if#e>0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2407 for o,t in b(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2408 he(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2409 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2410 e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2411 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2412 local e=re;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2413 for n,o in b(a)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2414 local i,o=o[1],o[2];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2415 if i<=t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2416 a[n]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2417 local t=o(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2418 if f(t)=="number"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2419 l(t,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2420 e=Y(e,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2421 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2422 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2423 e=Y(e,i-t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2424 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2425 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2426 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2427 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2428 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2429 ae=function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2430 return M,C,a,o,q
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2431 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2432 local e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2433 local function p(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2434 e=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2435 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2436 B=function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2437 if e then return"quitting";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2438 if t then e="once";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2439 d=F()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2440 repeat
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2441 local t=re;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2442 for e=1,q do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2443 local e=P[e](d)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2444 if e then t=Y(t,e);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2445 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2446 local t,a,o=ve(i,r,Y(A,t))
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2447 for t,e in ue(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2448 local t=h[e]
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2449 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2450 t.readbuffer()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2451 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2452 Q(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2453 n"server.lua: found no handler and closed socket (readlist)"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2454 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2455 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2456 for t,e in ue(a)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2457 local t=h[e]
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2458 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2459 t.sendbuffer()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2460 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2461 Q(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2462 n"server.lua: found no handler and closed socket (writelist)"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2463 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2464 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2465 for e,t in b(T)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2466 e.disconnect()(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2467 e:force_close()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2468 T[e]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2469 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2470 d=F()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2471 if d-K>R then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2472 K=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2473 for e,t in b(w)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2474 if d-t>D then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2475 e.disconnect()(e,"send timeout")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2476 e:force_close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2477 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2478 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2479 for e,t in b(v)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2480 if d-t>L then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2481 if not(e.onreadtimeout)or e:onreadtimeout()~=true then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2482 e.disconnect()(e,"read timeout")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2483 e:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2484 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2485 v[e]=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2486 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2487 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2488 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2489 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2490 for e,t in b(k)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2491 if d-t>N then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2492 k[e]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2493 e.resume();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2494 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2495 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2496 until e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2497 if e=="once"then e=nil;return;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2498 J();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2499 return"quitting"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2500 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2501 local function k()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2502 return B(true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2503 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2504 local function y()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2505 return"select";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2506 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2507 local c=function(l,e,t,n,d,s)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2508 local e,t,d=Z(nil,n,l,e,t,"clientport",d,s)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2509 if not e then return nil,d end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2510 h[t]=e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2511 if not s then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2512 a=u(i,t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2513 o=u(r,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2514 if n.onconnect then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2515 local t=e.sendbuffer;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2516 e.sendbuffer=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2517 e.sendbuffer=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2518 n.onconnect(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2519 return t();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2520 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2521 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2522 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2523 return e,t
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2524 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2525 local b=function(a,t,n,s,i,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2526 local e
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2527 if f(n)~="table"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2528 e="invalid listener table"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2529 elseif f(a)~="string"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2530 e="invalid address"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2531 elseif f(t)~="number"or not(t>=0 and t<=65535)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2532 e="invalid port"
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2533 elseif i and not O then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2534 e="luasec not found"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2535 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2536 if ee and not o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2537 local e,t=ee(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2538 if not e then return nil,t end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2539 if e[1]and e[1].family=="inet6"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2540 o="tcp6"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2541 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2542 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2543 local o=g[o or"tcp"]
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2544 if f(o)~="function"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2545 e="invalid socket type"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2546 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2547 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2548 E("server.lua, addclient: ",e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2549 return nil,e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2550 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2551 local e,o=o()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2552 if o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2553 return nil,o
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2554 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2555 e:settimeout(0)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2556 local h,o=e:connect(a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2557 if h or o=="timeout"or o=="Operation already in progress"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2558 return c(e,a,t,n,s,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2559 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2560 return nil,o
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2561 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2562 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2563 local g=function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2564 local e=e.conn;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2565 o=s(r,e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2566 a=s(i,e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2567 h[e]=nil
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2568 end;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2569 local t=function(n,t,d)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2570 local e=n.conn
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2571 h[e]=n
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2572 if t~=nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2573 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2574 a=u(i,e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2575 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2576 o=s(r,e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2577 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2578 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2579 if d~=nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2580 if d then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2581 o=u(r,e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2582 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2583 a=s(i,e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2584 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2585 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2586 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2587 local t=function(e,o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2588 local i=e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2589 if f(e)=="number"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2590 i={getfd=function()return e;end}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2591 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2592 local e={
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2593 conn=i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2594 readbuffer=o or I;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2595 sendbuffer=a or I;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2596 close=g;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2597 setflags=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2598 };
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2599 t(e,o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2600 return e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2601 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2602 m"setmetatable"(h,{__mode="k"})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2603 m"setmetatable"(v,{__mode="k"})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2604 m"setmetatable"(w,{__mode="k"})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2605 K=F()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2606 local function a(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2607 local t=W;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2608 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2609 W=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2610 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2611 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2612 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2613 return{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2614 _addtimer=X,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2615 add_task=l;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2616 addclient=b,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2617 wrapclient=c,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2618 watchfd=t,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2619 loop=B,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2620 link=x,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2621 step=k,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2622 stats=ae,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2623 closeall=J,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2624 addserver=ie,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2625 getserver=se,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2626 setlogger=a,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2627 getsettings=oe,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2628 setquitting=p,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2629 removeserver=le,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2630 get_backend=y,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2631 changesettings=de,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2632 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2633 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2634 package.preload['util.xmppstream']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2635 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2636 local function o(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2637 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2638 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2639 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2640 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2641 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2642 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2643 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2644 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2645 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2646 local e=require"lxp";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2647 local t=require"util.stanza";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2648 local p=t.stanza_mt;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2649 local f=error;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2650 local t=tostring;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2651 local l=table.insert;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2652 local w=table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2653 local T=table.remove;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2654 local y=setmetatable;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2655 local x=pcall(e.new,{StartDoctypeDecl=false});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2656 local z=pcall(e.new,{XmlDecl=false});
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2657 local a=not not e.new({}).getcurrentbytecount;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2658 local _=1024*1024*10;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2659 o"xmppstream"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2660 local k=e.new;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2661 local E={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2662 ["http://www.w3.org/XML/1998/namespace\1lang"]="xml:lang";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2663 ["http://www.w3.org/XML/1998/namespace\1space"]="xml:space";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2664 ["http://www.w3.org/XML/1998/namespace\1base"]="xml:base";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2665 ["http://www.w3.org/XML/1998/namespace\1id"]="xml:id";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2666 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2667 local o="http://etherx.jabber.org/streams";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2668 local d="\1";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2669 local b="^([^"..d.."]*)"..d.."?(.*)$";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2670 _M.ns_separator=d;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2671 _M.ns_pattern=b;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2672 local function s()end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2673 function new_sax_handlers(n,e,h)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2674 local i={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2675 local g=e.streamopened;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2676 local v=e.streamclosed;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2677 local u=e.error or function(o,a,e)f("XML stream error: "..t(a)..(e and": "..t(e)or""),2);end;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2678 local k=e.handlestanza;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2679 h=h or s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2680 local t=e.stream_ns or o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2681 local m=e.stream_tag or"stream";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2682 if t~=""then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2683 m=t..d..m;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2684 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2685 local q=t..d..(e.error_tag or"error");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2686 local j=e.default_ns;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2687 local d={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2688 local s,e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2689 local t=0;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2690 local r=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2691 function i:StartElement(c,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2692 if e and#s>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2693 l(e,w(s));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2694 s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2695 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2696 local s,i=c:match(b);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2697 if i==""then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2698 s,i="",s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2699 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2700 if s~=j or r>0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2701 o.xmlns=s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2702 r=r+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2703 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2704 for t=1,#o do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2705 local e=o[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2706 o[t]=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2707 local t=E[e];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2708 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2709 o[t]=o[e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2710 o[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2711 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2712 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2713 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2714 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2715 t=self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2716 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2717 if n.notopen then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2718 if c==m then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2719 r=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2720 if g then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2721 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2722 h(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2723 t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2724 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2725 g(n,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2726 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2727 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2728 u(n,"no-stream",c);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2729 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2730 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2731 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2732 if s=="jabber:client"and i~="iq"and i~="presence"and i~="message"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2733 u(n,"invalid-top-level-element");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2734 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2735 e=y({name=i,attr=o,tags={}},p);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2736 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2737 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2738 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2739 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2740 l(d,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2741 local t=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2742 e=y({name=i,attr=o,tags={}},p);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2743 l(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2744 l(t.tags,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2745 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2746 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2747 if z then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2748 function i:XmlDecl(e,e,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2749 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2750 h(self:getcurrentbytecount());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2751 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2752 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2753 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2754 function i:StartCdataSection()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2755 if a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2756 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2757 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2758 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2759 h(self:getcurrentbytecount());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2760 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2761 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2762 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2763 function i:EndCdataSection()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2764 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2765 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2766 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2767 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2768 h(self:getcurrentbytecount());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2769 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2770 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2771 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2772 function i:CharacterData(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2773 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2774 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2775 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2776 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2777 l(s,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2778 elseif a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2779 h(self:getcurrentbytecount());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2780 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2781 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2782 function i:EndElement(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2783 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2784 t=t+self:getcurrentbytecount()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2785 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2786 if r>0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2787 r=r-1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2788 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2789 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2790 if#s>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2791 l(e,w(s));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2792 s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2793 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2794 if#d==0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2795 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2796 h(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2797 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2798 t=0;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2799 if o~=q then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2800 k(n,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2801 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2802 u(n,"stream-error",e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2804 e=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2805 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2806 e=T(d);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2807 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2808 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2809 if v then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2810 v(n);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2811 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2812 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2813 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2814 local function a(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2815 u(n,"parse-error","restricted-xml","Restricted XML, see RFC 6120 section 11.1.");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2816 if not e.stop or not e:stop()then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2817 f("Failed to abort parsing");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2818 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2819 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2820 if x then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2821 i.StartDoctypeDecl=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2822 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2823 i.Comment=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2824 i.ProcessingInstruction=a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2825 local function a()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2826 e,s,t=nil,{},0;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2827 d={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2828 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2829 local function e(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2830 n=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2831 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2832 return i,{reset=a,set_session=e};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2833 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2834 function new(n,i,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2835 local e=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2836 local t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2837 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2838 function t(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2839 e=e-t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2840 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2841 o=o or _;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2842 elseif o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2843 f("Stanza size limits are not supported on this version of LuaExpat")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2844 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2845 local i,n=new_sax_handlers(n,i,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2846 local t=k(i,d,false);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2847 local s=t.parse;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2848 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2849 reset=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2850 t=k(i,d,false);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2851 s=t.parse;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2852 e=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2853 n.reset();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2854 end,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2855 feed=function(n,i)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2856 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2857 e=e+#i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2858 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2859 local i,t=s(t,i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2860 if a and e>o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2861 return nil,"stanza-too-large";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2862 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2863 return i,t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2864 end,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2865 set_session=n.set_session;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2866 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2867 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2868 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2869 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2870 package.preload['util.jid']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2871 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2872 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2873 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2874 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2875 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2876 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2877 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2878 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2879 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2880 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2881 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2882 local t,s=string.match,string.sub;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2883 local l=require"util.encodings".stringprep.nodeprep;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2884 local d=require"util.encodings".stringprep.nameprep;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2885 local r=require"util.encodings".stringprep.resourceprep;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2886 local n={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2887 [" "]="\\20";['"']="\\22";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2888 ["&"]="\\26";["'"]="\\27";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2889 ["/"]="\\2f";[":"]="\\3a";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2890 ["<"]="\\3c";[">"]="\\3e";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2891 ["@"]="\\40";["\\"]="\\5c";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2892 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2893 local i={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2894 for e,t in pairs(n)do i[t]=e;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2895 a"jid"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2896 local function o(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2897 if not e then return;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2898 local i,a=t(e,"^([^@/]+)@()");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2899 local a,o=t(e,"^([^@/]+)()",a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2900 if i and not a then return nil,nil,nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2901 local t=t(e,"^/(.+)$",o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2902 if(not a)or((not t)and#e>=o)then return nil,nil,nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2903 return i,a,t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2904 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2905 split=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2906 function bare(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2907 local t,e=o(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2908 if t and e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2909 return t.."@"..e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2910 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2911 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2912 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2913 local function h(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2914 local a,e,t=o(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2915 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2916 if s(e,-1,-1)=="."then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2917 e=s(e,1,-2);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2918 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2919 e=d(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2920 if not e then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2921 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2922 a=l(a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2923 if not a then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2924 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2925 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2926 t=r(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2927 if not t then return;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2928 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2929 return a,e,t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2930 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2931 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2932 prepped_split=h;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2933 function prep(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2934 local a,e,t=h(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2935 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2936 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2937 e=a.."@"..e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2938 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2939 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2940 e=e.."/"..t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2941 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2942 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2943 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2944 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2945 function join(a,e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2946 if a and e and t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2947 return a.."@"..e.."/"..t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2948 elseif a and e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2949 return a.."@"..e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2950 elseif e and t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2951 return e.."/"..t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2952 elseif e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2953 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2954 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2955 return nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2956 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2957 function compare(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2958 local n,i,s=o(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2959 local a,t,e=o(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2960 if((a~=nil and a==n)or a==nil)and
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2961 ((t~=nil and t==i)or t==nil)and
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2962 ((e~=nil and e==s)or e==nil)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2963 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2965 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2966 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2967 function escape(e)return e and(e:gsub(".",n));end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2968 function unescape(e)return e and(e:gsub("\\%x%x",i));end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2969 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2970 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2971 package.preload['util.events']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2972 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2973 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2974 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2975 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2976 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2977 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2978 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2979 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2980 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2981 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2982 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2983 local i=pairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2984 local r=table.insert;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2985 local s=table.sort;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2986 local h=setmetatable;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2987 local n=next;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2988 a"events"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2989 function new()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2990 local t={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2991 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2992 local function o(o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2993 local e=e[a];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2994 if not e or n(e)==nil then return;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2995 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2996 for e in i(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2997 r(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2998 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2999 s(t,function(a,t)return e[a]>e[t];end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3000 o[a]=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3001 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3002 end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3003 h(t,{__index=o});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3004 local function h(o,i,n)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3005 local a=e[o];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3006 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3007 a[i]=n or 0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3008 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3009 a={[i]=n or 0};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3010 e[o]=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3011 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3012 t[o]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3013 end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3014 local function s(o,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3015 local a=e[o];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3016 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3017 a[i]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3018 t[o]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3019 if n(a)==nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3020 e[o]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3021 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3022 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3023 end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3024 local function n(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3025 for t,e in i(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3026 h(t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3027 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3028 end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3029 local function a(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3030 for t,e in i(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3031 s(t,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3032 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3033 end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3034 local function o(e,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3035 local e=t[e];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3036 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3037 for t=1,#e do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3038 local e=e[t](...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3039 if e~=nil then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3040 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3041 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3042 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3043 return{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3044 add_handler=h;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3045 remove_handler=s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3046 add_handlers=n;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3047 remove_handlers=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3048 fire_event=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3049 _handlers=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3050 _event_map=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3051 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3052 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3053 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3054 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3055 package.preload['util.dataforms']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3056 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3057 local function o(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3058 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3059 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3060 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3061 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3062 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3063 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3064 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3065 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3066 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3067 local a=setmetatable;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3068 local e,i=pairs,ipairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3069 local h,r,c=tostring,type,next;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3070 local s=table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3071 local u=require"util.stanza";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3072 local d=require"util.jid".prep;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3073 o"dataforms"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3074 local l='jabber:x:data';
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3075 local n={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3076 local e={__index=n};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3077 function new(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3078 return a(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3079 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3080 function from_stanza(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3081 local o={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3082 title=e:get_child_text("title");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3083 instructions=e:get_child_text("instructions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3084 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3085 for t in e:childtags("field")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3086 local a={
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3087 name=t.attr.var;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3088 label=t.attr.label;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3089 type=t.attr.type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3090 required=t:get_child("required")and true or nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3091 value=t:get_child_text("value");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3092 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3093 o[#o+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3094 if a.type then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3095 local e={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3096 if a.type:match"list%-"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3097 for t in t:childtags("option")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3098 e[#e+1]={label=t.attr.label,value=t:get_child_text("value")};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3099 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3100 for t in t:childtags("value")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3101 e[#e+1]={label=t.attr.label,value=t:get_text(),default=true};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3102 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3103 elseif a.type:match"%-multi"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3104 for t in t:childtags("value")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3105 e[#e+1]=t.attr.label and{label=t.attr.label,value=t:get_text()}or t:get_text();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3106 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3107 if a.type=="text-multi"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3108 a.value=s(e,"\n");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3109 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3110 a.value=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3111 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3112 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3113 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3114 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3115 return new(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3116 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3117 function n.form(t,n,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3118 local e=u.stanza("x",{xmlns=l,type=e or"form"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3119 if t.title then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3120 e:tag("title"):text(t.title):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3121 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3122 if t.instructions then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3123 e:tag("instructions"):text(t.instructions):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3125 for t,o in i(t)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3126 local a=o.type or"text-single";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3127 e:tag("field",{type=a,var=o.name,label=o.label});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3128 local t=(n and n[o.name])or o.value;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3129 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3130 if a=="hidden"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3131 if r(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3132 e:tag("value")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3133 :add_child(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3134 :up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3135 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3136 e:tag("value"):text(h(t)):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3137 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3138 elseif a=="boolean"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3139 e:tag("value"):text((t and"1")or"0"):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3140 elseif a=="fixed"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3141 elseif a=="jid-multi"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3142 for a,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3143 e:tag("value"):text(t):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3144 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3145 elseif a=="jid-single"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3146 e:tag("value"):text(t):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3147 elseif a=="text-single"or a=="text-private"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3148 e:tag("value"):text(t):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3149 elseif a=="text-multi"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3150 for t in t:gmatch("([^\r\n]+)\r?\n*")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3151 e:tag("value"):text(t):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3152 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3153 elseif a=="list-single"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3154 local a=false;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3155 for o,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3156 if r(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3157 e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3158 if t.default and(not a)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3159 e:tag("value"):text(t.value):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3160 a=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3161 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3162 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3163 e:tag("option",{label=t}):tag("value"):text(h(t)):up():up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3164 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3165 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3166 elseif a=="list-multi"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3167 for a,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3168 if r(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3169 e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3170 if t.default then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3171 e:tag("value"):text(t.value):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3172 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3173 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3174 e:tag("option",{label=t}):tag("value"):text(h(t)):up():up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3176 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3177 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3178 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3179 if o.required then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3180 e:tag("required"):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3181 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3182 e:up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3183 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3184 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3186 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3187 function n.data(t,n)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3188 local o={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3189 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3190 for i,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3191 local i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3192 for e in n:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3193 if t.name==e.attr.var then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3194 i=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3195 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3196 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3197 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3198 if not i then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3199 if t.required then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3200 a[t.name]="Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3201 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3202 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3203 local e=e[t.type];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3204 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3205 o[t.name],a[t.name]=e(i,t.required);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3206 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3207 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3208 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3209 if c(a)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3210 return o,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3211 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3212 return o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3213 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3214 e["text-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3215 function(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3216 local t=t:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3217 if t and#t>0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3218 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3219 elseif a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3220 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3221 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3222 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3223 e["text-private"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3224 e["text-single"];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3225 e["jid-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3226 function(t,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3227 local t=t:get_child_text("value")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3228 local a=d(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3229 if a and#a>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3230 return a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3231 elseif t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3232 return nil,"Invalid JID: "..t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3233 elseif o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3234 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3235 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3236 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3237 e["jid-multi"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3238 function(o,i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3239 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3240 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3241 for e in o:childtags("value")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3242 local e=e:get_text();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3243 local o=d(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3244 a[#a+1]=o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3245 if e and not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3246 t[#t+1]=("Invalid JID: "..e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3247 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3248 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3249 if#a>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3250 return a,(#t>0 and s(t,"\n")or nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3251 elseif i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3252 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3253 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3254 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3255 e["list-multi"]=
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3256 function(o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3257 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3258 for e in o:childtags("value")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3259 t[#t+1]=e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3260 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3261 return t,(a and#t==0 and"Required value missing"or nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3262 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3263 e["text-multi"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3264 function(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3265 local t,a=e["list-multi"](t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3266 if t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3267 t=s(t,"\n");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3268 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3269 return t,a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3270 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3271 e["list-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3272 e["text-single"];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3273 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3274 ["1"]=true,["true"]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3275 ["0"]=false,["false"]=false,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3276 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3277 e["boolean"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3278 function(t,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3279 local t=t:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3280 local a=a[t~=nil and t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3281 if a~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3282 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3283 elseif t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3284 return nil,"Invalid boolean representation";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3285 elseif o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3286 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3287 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3289 e["hidden"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3290 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3291 return e:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3292 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3293 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3294 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3295 package.preload['util.caps']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3296 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3297 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3298 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3299 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3300 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3301 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3302 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3303 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3304 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3305 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3306 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3307 local l=require"util.encodings".base64.encode;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3308 local d=require"util.hashes".sha1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3309 local n,s,h=table.insert,table.sort,table.concat;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3310 local r=ipairs;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3311 a"caps"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3312 function calculate_hash(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3313 local a,o,i={},{},{};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3314 for t,e in r(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3315 if e.name=="identity"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3316 n(a,(e.attr.category or"").."\0"..(e.attr.type or"").."\0"..(e.attr["xml:lang"]or"").."\0"..(e.attr.name or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3317 elseif e.name=="feature"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3318 n(o,e.attr.var or"");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3319 elseif e.name=="x"and e.attr.xmlns=="jabber:x:data"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3320 local t={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3321 local o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3322 for a,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3323 if e.name=="field"and e.attr.var then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3324 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3325 for t,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3326 e=#e.tags==0 and e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3327 if e then n(a,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3328 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3329 s(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3330 if e.attr.var=="FORM_TYPE"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3331 o=a[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3332 elseif#a>0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3333 n(t,e.attr.var.."\0"..h(a,"<"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3334 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3335 n(t,e.attr.var);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3336 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3337 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3338 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3339 s(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3340 t=h(t,"<");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3341 if o then t=o.."\0"..t;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3342 n(i,t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3343 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3344 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3345 s(a);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3346 s(o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3347 s(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3348 if#a>0 then a=h(a,"<"):gsub("%z","/").."<";else a="";end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3349 if#o>0 then o=h(o,"<").."<";else o="";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3350 if#i>0 then i=h(i,"<"):gsub("%z","<").."<";else i="";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3351 local e=a..o..i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3352 local t=l(d(e));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3353 print(("CAPS %q %q"):format(t,e));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3354 return t,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3355 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3356 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3357 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3358 package.preload['util.vcard']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3359 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3360 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3361 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3362 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3363 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3364 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3365 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3366 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3367 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3368 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3369 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3370 local i=require"util.stanza";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3371 local a,h=table.insert,table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3372 local s=type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3373 local e,n,c=next,pairs,ipairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3374 local d,r,l,u;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3375 local m="\n";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3376 local o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3377 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3378 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3379 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3380 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3381 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3382 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3383 local function y(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3384 return e:gsub("[,:;\\]","\\%1"):gsub("\n","\\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3385 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3386 local function p(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3387 return e:gsub("\\?[\\nt:;,]",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3388 ["\\\\"]="\\",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3389 ["\\n"]="\n",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3390 ["\\r"]="\r",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3391 ["\\t"]="\t",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3392 ["\\:"]=":",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3393 ["\\;"]=";",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3394 ["\\,"]=",",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3395 [":"]="\29",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3396 [";"]="\30",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3397 [","]="\31",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3398 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3399 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3400 local function w(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3401 local a=i.stanza(e.name,{xmlns="vcard-temp"});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3402 local t=o[e.name];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3403 if t=="text"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3404 a:text(e[1]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3405 elseif s(t)=="table"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3406 if t.types and e.TYPE then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3407 if s(e.TYPE)=="table"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3408 for o,t in n(t.types)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3409 for o,e in n(e.TYPE)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3410 if e:upper()==t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3411 a:tag(t):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3412 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3413 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3414 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3415 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3416 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3417 a:tag(e.TYPE:upper()):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3418 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3419 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3420 if t.props then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3421 for o,t in n(t.props)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3422 if e[t]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3423 a:tag(t):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3424 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3425 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3426 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3427 if t.value then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3428 a:tag(t.value):text(e[1]):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3429 elseif t.values then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3430 local o=t.values;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3431 local i=o.behaviour=="repeat-last"and o[#o];
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3432 for o=1,#e do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3433 a:tag(t.values[o]or i):text(e[o]):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3434 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3435 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3436 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3437 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3438 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3439 local function f(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3440 local e=i.stanza("vCard",{xmlns="vcard-temp"});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3441 for a=1,#t do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3442 e:add_child(w(t[a]));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3443 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3444 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3445 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3446 function u(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3447 if not e[1]or e[1].name then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3448 return f(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3449 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3450 local t=i.stanza("xCard",{xmlns="vcard-temp"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3451 for a=1,#e do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3452 t:add_child(f(e[a]));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3454 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3455 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3456 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3457 function d(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3458 t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3459 :gsub("\r\n","\n")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3460 :gsub("\n ","")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3461 :gsub("\n\n+","\n");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3462 local s={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3463 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3464 for t in t:gmatch("[^\n]+")do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3465 local t=p(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3466 local n,t,i=t:match("^([-%a]+)(\30?[^\29]*)\29(.*)$");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3467 i=i:gsub("\29",":");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3468 if#t>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3469 local o={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3470 for a,n,i in t:gmatch("\30([^=]+)(=?)([^\30]*)")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3471 a=a:upper();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3472 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3473 for t in i:gmatch("[^\31]+")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3474 e[#e+1]=t
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3475 e[t]=true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3476 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3477 if n=="="then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3478 o[a]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3479 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3480 o[a]=true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3481 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3482 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3483 t=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3484 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3485 if n=="BEGIN"and i=="VCARD"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3486 e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3487 s[#s+1]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3488 elseif n=="END"and i=="VCARD"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3489 e=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3490 elseif e and o[n]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3491 local o=o[n];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3492 local n={name=n};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3493 e[#e+1]=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3494 local s=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3495 e=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3496 if o.types then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3497 for o,a in c(o.types)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3498 local a=a:lower();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3499 if(t.TYPE and t.TYPE[a]==true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3500 or t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3501 e.TYPE=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3502 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3503 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3504 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3505 if o.props then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3506 for o,a in c(o.props)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3507 if t[a]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3508 if t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3509 e[a]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3510 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3511 for o,t in c(t[a])do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3512 e[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3513 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3514 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3515 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3516 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3517 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3518 if o=="text"or o.value then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3519 a(e,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3520 elseif o.values then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3521 local t="\30"..i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3522 for t in t:gmatch("\30([^\30]*)")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3523 a(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3524 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3525 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3526 e=s;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3527 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3528 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3529 return s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3530 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3531 local function i(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3532 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3533 for a=1,#t do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3534 e[a]=y(t[a]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3535 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3536 e=h(e,";");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3537 local a="";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3538 for t,e in n(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3539 if s(t)=="string"and t~="name"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3540 a=a..(";%s=%s"):format(t,s(e)=="table"and h(e,",")or e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3541 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3542 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3543 return("%s%s:%s"):format(t.name,a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3544 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3545 local function t(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3546 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3547 a(e,"BEGIN:VCARD")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3548 for o=1,#t do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3549 a(e,i(t[o]));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3550 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3551 a(e,"END:VCARD")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3552 return h(e,m);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3553 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3554 function r(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3555 if e[1]and e[1].name then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3556 return t(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3557 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3558 local o={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3559 for a=1,#e do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3560 o[a]=t(e[a]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3561 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3562 return h(o,m);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3563 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3564 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3565 local function h(i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3566 local t=i.name;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3567 local e=o[t];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3568 local t={name=t};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3569 if e=="text"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3570 t[1]=i:get_text();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3571 elseif s(e)=="table"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3572 if e.value then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3573 t[1]=i:get_child_text(e.value)or"";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3574 elseif e.values then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3575 local e=e.values;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3576 if e.behaviour=="repeat-last"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3577 for e=1,#i.tags do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3578 a(t,i.tags[e]:get_text()or"");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3579 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3580 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3581 for o=1,#e do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3582 a(t,i:get_child_text(e[o])or"");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3583 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3584 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3585 elseif e.names then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3586 local e=e.names;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3587 for a=1,#e do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3588 if i:get_child(e[a])then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3589 t[1]=e[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3590 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3591 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3592 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3593 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3594 if e.props_verbatim then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3595 for a,e in n(e.props_verbatim)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3596 t[a]=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3597 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3598 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3599 if e.types then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3600 local e=e.types;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3601 t.TYPE={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3602 for o=1,#e do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3603 if i:get_child(e[o])then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3604 a(t.TYPE,e[o]:lower());
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3605 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3606 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3607 if#t.TYPE==0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3608 t.TYPE=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3609 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3610 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3611 if e.props then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3612 local e=e.props;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3613 for o=1,#e do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3614 local e=e[o]
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3615 local o=i:get_child_text(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3616 if o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3617 t[e]=t[e]or{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3618 a(t[e],o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3619 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3620 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3621 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3622 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3623 return nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3624 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3625 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3626 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3627 local function i(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3628 local e=e.tags;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3629 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3630 for o=1,#e do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3631 a(t,h(e[o]));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3632 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3633 return t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3634 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3635 function l(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3636 if e.attr.xmlns~="vcard-temp"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3637 return nil,"wrong-xmlns";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3638 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3639 if e.name=="xCard"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3640 local a={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3641 local t=e.tags;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3642 for e=1,#t do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3643 a[e]=i(t[e]);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3644 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3645 return a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3646 elseif e.name=="vCard"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3647 return i(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3648 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3649 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3650 o={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3651 VERSION="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3652 FN="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3653 N={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3654 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3655 "FAMILY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3656 "GIVEN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3657 "MIDDLE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3658 "PREFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3659 "SUFFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3660 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3661 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3662 NICKNAME="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3663 PHOTO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3664 props_verbatim={ENCODING={"b"}},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3665 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3666 value="BINVAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3667 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3668 BDAY="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3669 ADR={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3670 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3671 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3672 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3673 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3674 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3675 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3676 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3677 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3678 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3679 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3680 "POBOX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3681 "EXTADD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3682 "STREET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3683 "LOCALITY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3684 "REGION",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3685 "PCODE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3686 "CTRY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3687 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3688 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3689 LABEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3690 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3691 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3692 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3693 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3694 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3695 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3696 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3697 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3698 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3699 value="LINE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3700 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3701 TEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3702 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3703 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3704 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3705 "VOICE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3706 "FAX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3707 "PAGER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3708 "MSG",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3709 "CELL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3710 "VIDEO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3711 "BBS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3712 "MODEM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3713 "ISDN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3714 "PCS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3715 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3716 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3717 value="NUMBER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3718 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3719 EMAIL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3720 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3721 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3722 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3723 "INTERNET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3724 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3725 "X400",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3726 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3727 value="USERID",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3728 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3729 JABBERID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3730 MAILER="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3731 TZ="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3732 GEO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3733 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3734 "LAT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3735 "LON",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3736 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3737 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3738 TITLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3739 ROLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3740 LOGO="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3741 AGENT="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3742 ORG={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3743 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3744 behaviour="repeat-last",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3745 "ORGNAME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3746 "ORGUNIT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3747 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3748 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3749 CATEGORIES={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3750 values="KEYWORD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3751 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3752 NOTE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3753 PRODID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3754 REV="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3755 SORTSTRING="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3756 SOUND="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3757 UID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3758 URL="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3759 CLASS={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3760 names={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3761 "PUBLIC",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3762 "PRIVATE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3763 "CONFIDENTIAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3764 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3765 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3766 KEY={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3767 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3768 value="CRED",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3769 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3770 DESC="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3771 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3772 o.LOGO=o.PHOTO;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3773 o.SOUND=o.PHOTO;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3774 return{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3775 from_text=d;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3776 to_text=r;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3777 from_xep54=l;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3778 to_xep54=u;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3779 lua_to_text=r;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3780 lua_to_xep54=u;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3781 text_to_lua=d;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3782 text_to_xep54=function(...)return u(d(...));end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3783 xep54_to_lua=l;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3784 xep54_to_text=function(...)return r(l(...))end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3785 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3786 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3787 package.preload['util.logger']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3788 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3789 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3790 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3791 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3792 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3793 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3794 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3795 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3796 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3797 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3798 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3799 local e=pcall;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3800 local e=string.find;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3801 local e,o,e=ipairs,pairs,setmetatable;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3802 local a={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3803 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3804 local t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3805 function a.init(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3806 local a=t(e,"debug");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3807 local o=t(e,"info");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3808 local i=t(e,"warn");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3809 local n=t(e,"error");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3810 return function(t,e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3811 if t=="debug"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3812 return a(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3813 elseif t=="info"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3814 return o(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3815 elseif t=="warn"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3816 return i(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3817 elseif t=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3818 return n(e,...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3819 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3820 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3821 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3822 function t(o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3823 local t=e[a];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3824 if not t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3825 t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3826 e[a]=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3827 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3828 local e=function(e,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3829 for i=1,#t do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3830 t[i](o,a,e,...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3831 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3832 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3833 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3834 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3835 function a.reset()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3836 for t,e in o(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3837 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3838 e[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3839 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3840 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3841 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3842 function a.add_level_sink(t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3843 if not e[t]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3844 e[t]={o};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3845 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3846 e[t][#e[t]+1]=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3847 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3848 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3849 a.new=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3850 return a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3851 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3852 package.preload['util.datetime']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3853 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3854 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3855 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3856 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3857 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3858 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3859 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3860 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3861 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3862 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3863 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3864 local e=os.date;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3865 local i=os.time;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3866 local u=os.difftime;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3867 local t=error;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3868 local s=tonumber;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3869 a"datetime"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3870 function date(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3871 return e("!%Y-%m-%d",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3872 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3873 function datetime(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3874 return e("!%Y-%m-%dT%H:%M:%SZ",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3875 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3876 function time(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3877 return e("!%H:%M:%S",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3878 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3879 function legacy(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3880 return e("!%Y%m%dT%H:%M:%S",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3881 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3882 function parse(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3883 if o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3884 local n,h,l,d,r,t,a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3885 n,h,l,d,r,t,a=o:match("^(%d%d%d%d)%-?(%d%d)%-?(%d%d)T(%d%d):(%d%d):(%d%d)%.?%d*([Z+%-]?.*)$");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3886 if n then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3887 local u=u(i(e("*t")),i(e("!*t")));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3888 local o=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3889 if a~=""and a~="Z"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3890 local a,t,e=a:match("([+%-])(%d%d):?(%d*)");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3891 if not a then return;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3892 if#e~=2 then e="0";end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3893 t,e=s(t),s(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3894 o=t*60*60+e*60;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3895 if a=="-"then o=-o;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3896 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3897 t=(t+u)-o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3898 return i({year=n,month=h,day=l,hour=d,min=r,sec=t,isdst=false});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3899 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3900 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3901 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3902 return _M;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3903 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3904 package.preload['util.json']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3905 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3906 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3907 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3908 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3909 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3910 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3911 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3912 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3913 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3914 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3915 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3916 local w=type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3917 local t,v,p,q=table.insert,table.concat,table.remove,table.sort;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3918 local h=string.char;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3919 local j,l=tostring,tonumber;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3920 local u,s=pairs,ipairs;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3921 local i=next;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3922 local e=error;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3923 local e,r,b=newproxy,getmetatable,setmetatable;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3924 local c=print;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3925 local a,o=pcall(require,"util.array");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3926 local f=a and r(o())or{};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3927 local a={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3928 local n=e and e(true)or{};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3929 if r and r(n)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3930 r(n).__tostring=function()return"null";end;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3931 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3932 a.null=n;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3933 local y={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3934 ["\""]="\\\"",["\\"]="\\\\",["\b"]="\\b",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3935 ["\f"]="\\f",["\n"]="\\n",["\r"]="\\r",["\t"]="\\t"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3936 local e={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3937 ["\""]="\"",["\\"]="\\",["/"]="/",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3938 b="\b",f="\f",n="\n",r="\r",t="\t"};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3939 for e=0,31 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3940 local t=h(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3941 if not y[t]then y[t]=("\\u%.4X"):format(e);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3942 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3943 local function x(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3944 if e<128 then return h(e);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3945 local t=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3946 if e<2048 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3947 local e=(e-t)/64;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3948 return h(128+64+e,128+t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3949 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3950 local a=e%4096;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3951 local o=(a-t)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3952 local e=(e-a)/4096;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3953 return h(128+64+32+e,128+o,128+t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3954 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3955 local g={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3956 number=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3957 string=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3958 table=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3959 boolean=true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3960 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3961 local z={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3962 __array=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3963 __hash=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3964 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3965 local o,k,d,m;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3966 function m(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3967 t(e,"\""..(a:gsub(".",y)).."\"");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3968 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3969 function d(a,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3970 t(e,"[");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3971 if i(a)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3972 for i,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3973 o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3974 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3975 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3976 p(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3977 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3978 t(e,"]");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3979 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3980 function k(l,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3981 local a={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3982 local r={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3983 local h={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3984 for t,e in s(l)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3985 a[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3986 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3987 for e,t in u(l)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3988 local o,i=w(e),w(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3989 if g[i]or t==n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3990 if o=="string"and not z[e]then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3991 h[e]=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3992 elseif(g[o]or e==n)and a[e]==nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3993 r[e]=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3994 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3995 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3996 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3997 if i(r)~=nil or i(h)~=nil or i(a)==nil then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3998 t(e,"{");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3999 local n=#e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4000 if e.ordered then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4001 local a={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4002 for e in u(h)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4003 t(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4004 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4005 q(a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4006 for i,a in s(a)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4007 m(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4008 t(e,":");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4009 o(h[a],e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4010 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4011 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4012 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4013 for a,i in u(h)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4014 m(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4015 t(e,":");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4016 o(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4017 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4018 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4019 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4020 if i(r)~=nil then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4021 t(e,"\"__hash\":[");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4022 for i,a in u(r)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4023 o(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4024 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4025 o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4026 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4027 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4028 p(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4029 t(e,"]");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4030 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4031 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4032 if i(a)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4033 t(e,"\"__array\":");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4034 d(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4035 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4036 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4037 if n~=#e then p(e);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4038 t(e,"}");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4039 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4040 d(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4041 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4042 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4043 function o(e,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4044 local o=w(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4045 if o=="number"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4046 t(a,j(e));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4047 elseif o=="string"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4048 m(e,a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4049 elseif o=="table"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4050 local t=r(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4051 if t==f then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4052 d(e,a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4053 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4054 k(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4055 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4056 elseif o=="boolean"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4057 t(a,(e and"true"or"false"));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4058 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4059 t(a,"null");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4060 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4061 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4062 function a.encode(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4063 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4064 o(t,e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4065 return v(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4066 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4067 function a.encode_ordered(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4068 local e={ordered=true};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4069 o(t,e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4070 return v(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4071 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4072 function a.encode_array(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4073 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4074 d(t,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4075 return v(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4076 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4077 local function o(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4078 return t:find("[^ \t\r\n]",e)or e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4079 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4080 local function d(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4081 local a=e.__array;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4082 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4083 e.__array=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4084 for o,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4085 t(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4086 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4087 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4088 local a=e.__hash;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4089 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4090 e.__hash=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4091 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4092 for o,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4093 if t~=nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4094 e[t]=a;t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4095 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4096 t=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4097 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4098 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4099 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4100 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4101 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4102 local i,r;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4103 local function m(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4104 local s={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4105 while true do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4106 local n,a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4107 e=o(t,e+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4108 if t:byte(e)~=34 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4109 if t:byte(e)==125 then return s,e+1;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4110 return nil,"key expected";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4111 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4112 n,e=r(t,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4113 if n==nil then return nil,e;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4114 e=o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4115 if t:byte(e)~=58 then return nil,"colon expected";end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4116 a,e=i(t,e+1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4117 if a==nil then return nil,e;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4118 s[n]=a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4119 e=o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4120 local t=t:byte(e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4121 if t==125 then return d(s),e+1;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4122 if t~=44 then return nil,"object eof";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4123 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4124 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4125 local function u(n,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4126 local s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4127 local h=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4128 while true do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4129 local a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4130 a,e=i(n,e+1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4131 if a==nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4132 if n:byte(h+1)==93 then return b(s,f),h+2;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4133 return a,e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4134 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4135 t(s,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4136 e=o(n,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4137 local t=n:byte(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4138 if t==93 then return b(s,f),e+1;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4139 if t~=44 then return nil,"array eof";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4140 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4141 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4142 local t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4143 local function e(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4144 local e,t=l(e:sub(3,6),16),l(e:sub(9,12),16);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4145 local e=e*1024+t-56613888;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4146 local a=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4147 e=(e-a)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4148 local t=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4149 e=(e-t)/64;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4150 local o=e%64;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4151 e=(e-o)/64;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4152 return h(240+e,128+o,128+t,128+a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4153 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4154 local function s(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4155 e=e:match("%x%x%x%x",3);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4156 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4157 return x(l(e,16));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4158 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4159 t=true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4160 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4161 function r(o,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4162 e=e+1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4163 local a=o:find("\"",e,true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4164 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4165 local e=o:sub(e,a-1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4166 t=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4167 e=e:gsub("\\u.?.?.?.?",s);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4168 if t then return nil,"invalid escape";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4169 return e,a+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4170 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4171 return nil,"string eof";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4172 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4173 local function d(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4174 local t=t:match("[0-9%.%-eE%+]+",e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4175 return l(t),e+#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4176 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4177 local function s(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4178 local o,a,t=t:byte(e+1,e+3);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4179 if o==117 and a==108 and t==108 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4180 return n,e+4;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4181 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4182 return nil,"null parse failed";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4183 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4184 local function n(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4185 local a,t,o=t:byte(e+1,e+3);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4186 if a==114 and t==117 and o==101 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4187 return true,e+4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4188 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4189 return nil,"true parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4190 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4191 local function h(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4192 local t,a,o,i=t:byte(e+1,e+4);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4193 if t==97 and a==108 and o==115 and i==101 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4194 return false,e+5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4195 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4196 return nil,"false parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4197 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4198 function i(a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4199 t=o(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4200 local e=a:byte(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4201 if e==123 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4202 return m(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4203 elseif e==91 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4204 return u(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4205 elseif e==34 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4206 return r(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4207 elseif e~=nil and e>=48 and e<=57 or e==45 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4208 return d(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4209 elseif e==110 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4210 return s(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4211 elseif e==116 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4212 return n(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4213 elseif e==102 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4214 return h(a,t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4215 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4216 return nil,"value expected";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4217 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4218 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4219 local t={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4220 ["\\\""]="\\u0022";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4221 ["\\\\"]="\\u005c";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4222 ["\\/"]="\\u002f";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4223 ["\\b"]="\\u0008";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4224 ["\\f"]="\\u000C";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4225 ["\\n"]="\\u000A";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4226 ["\\r"]="\\u000D";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4227 ["\\t"]="\\u0009";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4228 ["\\u"]="\\u";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4229 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4230 function a.decode(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4231 e=e:gsub("\\.",t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4232 local t,a=i(e,1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4233 if t==nil then return t,a;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4234 if e:find("[^ \t\r\n]",a)then return nil,"garbage at eof";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4235 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4236 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4237 function a.test(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4238 local e=a.encode(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4239 local t=a.decode(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4240 local t=a.encode(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4241 if e~=t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4242 c("FAILED");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4243 c("encoded:",e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4244 c("recoded:",t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4245 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4246 c(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4247 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4248 return e==t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4249 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4250 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4251 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4252 package.preload['util.xml']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4253 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4254 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4255 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4256 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4257 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4258 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4259 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4260 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4261 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4262 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4263 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4264 local t=require"util.stanza";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4265 local h=require"lxp";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4266 a("xml")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4267 local e=(function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4268 local n={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4269 ["http://www.w3.org/XML/1998/namespace"]="xml";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4270 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4271 local e="\1";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4272 local i="^([^"..e.."]*)"..e.."?(.*)$";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4273 return function(s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4274 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4275 local a=t.stanza("root");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4276 function o:StartElement(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4277 local t,o=t:match(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4278 if o==""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4279 t,o="",t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4280 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4281 if t~=""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4282 e.xmlns=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4283 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4284 for t=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4285 local a=e[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4286 e[t]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4287 local t,o=a:match(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4288 if o~=""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4289 t=n[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4290 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4291 e[t..":"..o]=e[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4292 e[a]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4293 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4294 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4295 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4296 a:tag(o,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4297 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4298 function o:CharacterData(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4299 a:text(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4300 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4301 function o:EndElement(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4302 a:up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4303 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4304 local n=h.new(o,"\1");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4305 local e,i,t,o=n:parse(s);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4306 if e then e,i,t,o=n:parse();end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4307 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4308 return a.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4309 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4310 return e,i.." (line "..t..", col "..o..")";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4311 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4312 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4313 end)();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4314 parse=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4315 return _M;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4316 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4317 package.preload['util.rsm']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4318 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4319 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4320 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4321 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4322 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4323 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4324 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4325 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4326 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4327 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4328 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4329 local h=require"util.stanza".stanza;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4330 local t,o=tostring,tonumber;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4331 local n=type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4332 local s=pairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4333 local i='http://jabber.org/protocol/rsm';
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4334 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4335 do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4336 local e=a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4337 local function t(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4338 return o((e:get_text()));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4339 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4340 local function a(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4341 return t:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4342 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4343 e.after=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4344 e.before=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4345 local e=e:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4346 return e==""or e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4347 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4348 e.max=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4349 e.index=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4350 e.first=function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4351 return{index=o(e.attr.index);e:get_text()};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4352 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4353 e.last=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4354 e.count=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4355 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4356 local r=setmetatable({
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4357 first=function(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4358 if n(e)=="table"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4359 a:tag("first",{index=e.index}):text(e[1]):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4360 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4361 a:tag("first"):text(t(e)):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4362 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4363 end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4364 before=function(e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4365 if a==true then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4366 e:tag("before"):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4367 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4368 e:tag("before"):text(t(a)):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4369 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4370 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4371 },{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4372 __index=function(e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4373 return function(e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4374 e:tag(o):text(t(a)):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4375 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4376 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4377 });
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4378 local function t(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4379 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4380 for o in e:childtags()do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4381 local e=o.name;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4382 local a=e and a[e];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4383 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4384 t[e]=a(o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4385 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4386 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4387 return t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4388 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4389 local function n(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4390 local e=h("set",{xmlns=i});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4391 for t,o in s(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4392 if a[t]then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4393 r[t](e,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4394 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4395 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4396 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4397 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4398 local function a(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4399 local e=e:get_child("set",i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4400 if e and#e.tags>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4401 return t(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4402 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4403 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4404 return{parse=t,generate=n,get=a};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4405 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4406 package.preload['util.random']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4407 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4408 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4409 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4410 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4411 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4412 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4413 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4414 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4415 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4416 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4417 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4418 local e=io.open("/dev/urandom","r");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4419 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4420 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4421 seed=function()end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4422 bytes=function(t)return e:read(t);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4423 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4424 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4425 local e=require"crypto"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4426 return e.rand;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4427 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4428 package.preload['util.ip']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4429 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4430 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4431 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4432 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4433 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4434 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4435 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4436 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4437 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4438 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4439 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4440 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4441 local i={__index=function(t,e)return(o[e])(t);end,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4442 __tostring=function(e)return e.addr;end,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4443 __eq=function(t,e)return t.addr==e.addr;end};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4444 local n={["0"]="0000",["1"]="0001",["2"]="0010",["3"]="0011",["4"]="0100",["5"]="0101",["6"]="0110",["7"]="0111",["8"]="1000",["9"]="1001",["A"]="1010",["B"]="1011",["C"]="1100",["D"]="1101",["E"]="1110",["F"]="1111"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4445 local function e(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4446 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4447 local a=e:match("^%x+(.)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4448 if a==":"or(not(a)and e:sub(1,1)==":")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4449 t="IPv6"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4450 elseif a=="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4451 t="IPv4"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4452 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4453 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4454 return nil,"invalid address";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4455 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4456 elseif t~="IPv4"and t~="IPv6"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4457 return nil,"invalid protocol";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4458 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4459 local a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4460 if t=="IPv6"and e:find('%',1,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4461 e,a=e:match("^(.-)%%(.*)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4462 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4463 if t=="IPv6"and e:find('.',1,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4464 local t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4465 e,t=e:gsub(":(%d+)%.(%d+)%.(%d+)%.(%d+)$",function(t,e,a,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4466 return(":%04X:%04X"):format(t*256+e,a*256+o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4467 end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4468 if t~=1 then return nil,"invalid-address";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4469 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4470 return setmetatable({addr=e,proto=t,zone=a},i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4471 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4472 local function i(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4473 local t="";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4474 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4475 if a.proto=="IPv4"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4476 a=a.toV4mapped;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4477 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4478 a=(a.addr):upper();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4479 a:gsub("([^:]*):?",function(t)e[#e+1]=t end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4480 if not a:match(":$")then e[#e]=nil;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4481 for o,a in ipairs(e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4482 if a:len()==0 and o~=1 and o~=#e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4483 for e=1,16*(9-#e)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4484 t=t.."0";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4485 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4486 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4487 for e=1,4-a:len()do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4488 t=t.."0000";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4489 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4490 for e=1,a:len()do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4491 t=t..n[a:sub(e,e)];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4492 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4493 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4494 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4495 return t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4496 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4497 local function t(a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4498 a,t=i(a),i(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4499 for e=1,128 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4500 if a:sub(e,e)~=t:sub(e,e)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4501 return e-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4502 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4503 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4504 return 128;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4505 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4506 local function h(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4507 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4508 t:gsub("([^.]*).?",function(t)e[#e+1]=tonumber(t)end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4509 if e[1]==127 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4510 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4511 elseif e[1]==169 and e[2]==254 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4512 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4513 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4514 return 14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4515 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4516 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4517 local function r(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4518 if e:match("^[0:]*1$")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4519 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4520 elseif e:match("^[Ff][Ee][89ABab]")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4521 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4522 elseif e:match("^[Ff][Ee][CcDdEeFf]")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4523 return 5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4524 elseif e:match("^[Ff][Ff]")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4525 return tonumber("0x"..e:sub(4,4));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4526 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4527 return 14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4528 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4529 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4530 local function i(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4531 if t(a,e("::1","IPv6"))==128 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4532 return 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4533 elseif t(a,e("2002::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4534 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4535 elseif t(a,e("2001::","IPv6"))>=32 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4536 return 5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4537 elseif t(a,e("fc00::","IPv6"))>=7 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4538 return 13;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4539 elseif t(a,e("fec0::","IPv6"))>=10 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4540 return 11;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4541 elseif t(a,e("3ffe::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4542 return 12;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4543 elseif t(a,e("::","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4544 return 3;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4545 elseif t(a,e("::ffff:0:0","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4546 return 4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4547 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4548 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4549 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4550 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4551 local function n(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4552 if t(a,e("::1","IPv6"))==128 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4553 return 50;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4554 elseif t(a,e("2002::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4555 return 30;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4556 elseif t(a,e("2001::","IPv6"))>=32 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4557 return 5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4558 elseif t(a,e("fc00::","IPv6"))>=7 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4559 return 3;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4560 elseif t(a,e("fec0::","IPv6"))>=10 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4561 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4562 elseif t(a,e("3ffe::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4563 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4564 elseif t(a,e("::","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4565 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4566 elseif t(a,e("::ffff:0:0","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4567 return 35;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4568 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4569 return 40;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4570 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4571 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4572 local function s(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4573 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4574 local t="::ffff:";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4575 o:gsub("([^.]*).?",function(e)a[#a+1]=tonumber(e)end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4576 t=t..("%02x"):format(a[1]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4577 t=t..("%02x"):format(a[2]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4578 t=t..":"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4579 t=t..("%02x"):format(a[3]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4580 t=t..("%02x"):format(a[4]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4581 return e(t,"IPv6");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4582 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4583 function o:toV4mapped()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4584 if self.proto~="IPv4"then return nil,"No IPv4 address"end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4585 local e=s(self.addr);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4586 self.toV4mapped=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4587 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4588 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4589 function o:label()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4590 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4591 if self.proto=="IPv4"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4592 e=i(self.toV4mapped);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4593 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4594 e=i(self);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4595 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4596 self.label=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4597 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4598 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4599 function o:precedence()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4600 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4601 if self.proto=="IPv4"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4602 e=n(self.toV4mapped);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4603 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4604 e=n(self);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4605 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4606 self.precedence=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4607 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4608 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4609 function o:scope()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4610 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4611 if self.proto=="IPv4"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4612 e=h(self.addr);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4613 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4614 e=r(self.addr);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4615 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4616 self.scope=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4617 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4618 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4619 return{new_ip=e,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4620 commonPrefixLength=t};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4621 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4622 package.preload['util.sasl.scram']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4623 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4624 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4625 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4626 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4627 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4628 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4629 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4630 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4631 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4632 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4633 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4634 local n,u=require"mime".b64,require"mime".unb64;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4635 local e=require"util.hashes";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4636 local a=require"bit";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4637 local s=require"util.random";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4638 local d=tonumber;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4639 local h,t=string.char,string.byte;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4640 local i=string.gsub;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4641 local r=a.bxor;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4642 local function l(e,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4643 return(i(e,"()(.)",function(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4644 return h(r(t(e),t(o,a)))
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4645 end));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4646 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4647 local y,t=e.sha1,e.hmac_sha1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4648 local function w(o,e,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4649 local e=t(o,e.."\0\0\0\1");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4650 local a=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4651 for i=2,i do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4652 e=t(o,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4653 a=l(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4654 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4655 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4656 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4657 local function p(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4658 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4659 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4660 local function a(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4661 return(i(e,"[,=]",{[","]="=2C",["="]="=3D"}));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4662 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4663 local function f(e,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4664 local a="n="..a(e.username);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4665 local h=n(s.bytes(15));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4666 local c="r="..h;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4667 local m=a..","..c;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4668 local o="";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4669 local a=e.conn:ssl()and"y"or"n";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4670 if i=="SCRAM-SHA-1-PLUS"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4671 o=e.conn:socket():getfinished();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4672 a="p=tls-unique";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4673 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4674 local s=a..",,";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4675 local a=s..m;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4676 local a,r=coroutine.yield(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4677 if a~="challenge"then return false end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4678 local a,i,f=r:match("(r=[^,]+),s=([^,]*),i=(%d+)");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4679 local d=d(f);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4680 i=u(i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4681 if not a or not i or not d then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4682 return false,"Could not parse server_first_message";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4683 elseif a:find(h,3,true)~=3 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4684 return false,"nonce sent by server does not match our nonce";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4685 elseif a==c then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4686 return false,"server did not append s-nonce to nonce";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4687 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4688 local o=s..o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4689 local o="c="..n(o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4690 local h=o..","..a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4691 local o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4692 local a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4693 local s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4694 if e.client_key and e.server_key then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4695 a=e.client_key;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4696 s=e.server_key;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4697 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4698 if e.salted_password then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4699 o=e.salted_password;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4700 elseif e.password then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4701 o=w(p(e.password),i,d);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4702 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4703 s=t(o,"Server Key");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4704 a=t(o,"Client Key");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4705 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4706 local o=y(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4707 local e=m..","..r..","..h;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4708 local o=t(o,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4709 local a=l(a,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4710 local t=t(s,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4711 local e="p="..n(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4712 local e=h..","..e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4713 local e,a=coroutine.yield(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4714 if e~="success"then return false,"success-expected"end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4715 local e=a:match("v=([^,]+)");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4716 if u(e)~=t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4717 return false,"server signature did not match";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4718 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4719 return true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4720 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4721 return function(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4722 if e.username and(e.password or(e.client_key or e.server_key))then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4723 if t=="SCRAM-SHA-1"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4724 return f,99;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4725 elseif t=="SCRAM-SHA-1-PLUS"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4726 local e=e.conn:ssl()and e.conn:socket();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4727 if e and e.getfinished then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4728 return f,100;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4729 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4730 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4731 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4732 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4733 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4734 package.preload['util.sasl.plain']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4735 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4736 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4737 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4738 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4739 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4740 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4741 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4742 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4743 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4744 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4745 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4746 return function(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4747 if t=="PLAIN"and e.username and e.password then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4748 return function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4749 return"success"==coroutine.yield("\0"..e.username.."\0"..e.password);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4750 end,5;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4751 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4752 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4753 end)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4754 package.preload['util.sasl.anonymous']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4755 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4756 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4757 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4758 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4759 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4760 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4761 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4762 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4763 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4764 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4765 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4766 return function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4767 if e=="ANONYMOUS"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4768 return function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4769 return coroutine.yield()=="success";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4770 end,0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4771 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4772 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4773 end)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4774 package.preload['verse.plugins.tls']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4775 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4776 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4777 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4778 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4779 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4780 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4781 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4782 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4783 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4784 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4785 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4786 local a=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4787 local t="urn:ietf:params:xml:ns:xmpp-tls";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4788 function a.plugins.tls(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4789 local function i(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4790 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4791 if o:get_child("starttls",t)and e.conn.starttls then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4792 e:debug("Negotiating TLS...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4793 e:send(a.stanza("starttls",{xmlns=t}));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4794 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4795 elseif not e.conn.starttls and not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4796 e:warn("SSL libary (LuaSec) not loaded, so TLS not available");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4797 elseif not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4798 e:debug("Server doesn't offer TLS :(");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4799 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4800 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4801 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4802 if t.name=="proceed"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4803 e:debug("Server says proceed, handshake starting...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4804 e.conn:starttls(e.ssl or{mode="client",protocol="sslv23",options="no_sslv2",capath="/etc/ssl/certs"},true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4805 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4806 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4807 local function a(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4808 if t=="ssl-handshake-complete"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4809 e.secure=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4810 e:debug("Re-opening stream...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4811 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4812 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4813 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4814 e:hook("stream-features",i,400);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4815 e:hook("stream/"..t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4816 e:hook("status",a,400);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4817 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4818 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4819 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4820 package.preload['verse.plugins.sasl']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4821 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4822 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4823 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4824 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4825 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4826 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4827 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4828 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4829 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4830 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4831 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4832 local i=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4833 local s,h=require"mime".b64,require"mime".unb64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4834 local a="urn:ietf:params:xml:ns:xmpp-sasl";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4835 function i.plugins.sasl(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4836 local function r(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4837 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4838 e:debug("Authenticating with SASL...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4839 local t=t:get_child("mechanisms",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4840 if not t then return end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4841 local o={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4842 local n={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4843 for t in t:childtags("mechanism")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4844 t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4845 e:debug("Server offers %s",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4846 if not o[t]then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4847 local i=t:match("[^-]+");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4848 local s,a=pcall(require,"util.sasl."..i:lower());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4849 if s then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4850 e:debug("Loaded SASL %s module",i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4851 o[t],n[t]=a(e,t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4852 elseif not tostring(a):match("not found")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4853 e:debug("Loading failed: %s",tostring(a));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4854 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4855 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4857 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4858 for e in pairs(o)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4859 table.insert(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4860 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4861 if not t[1]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4862 e:event("authentication-failure",{condition="no-supported-sasl-mechanisms"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4863 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4864 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4865 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4866 table.sort(t,function(t,e)return n[t]>n[e];end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4867 local t,n=t[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4868 e:debug("Selecting %s mechanism...",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4869 e.sasl_mechanism=coroutine.wrap(o[t]);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4870 n=e:sasl_mechanism(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4871 local t=i.stanza("auth",{xmlns=a,mechanism=t});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4872 if n then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4873 t:text(s(n));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4874 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4875 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4876 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4877 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4878 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4879 if t.name=="failure"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4880 local a=t.tags[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4881 local t=t:get_child_text("text");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4882 e:event("authentication-failure",{condition=a.name,text=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4883 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4884 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4885 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4886 local t,o=e.sasl_mechanism(t.name,h(t:get_text()));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4887 if not t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4888 e:event("authentication-failure",{condition=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4889 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4890 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4891 elseif t==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4892 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4893 e.authenticated=true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4894 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4895 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4896 e:send(i.stanza("response",{xmlns=a}):text(s(t)));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4897 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4898 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4899 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4900 e:hook("stream-features",r,300);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4901 e:hook("stream/"..a,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4902 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4903 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4904 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4905 package.preload['verse.plugins.bind']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4906 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4907 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4908 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4909 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4910 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4911 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4912 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4913 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4914 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4915 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4916 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4917 local t=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4918 local i=require"util.jid";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4919 local a="urn:ietf:params:xml:ns:xmpp-bind";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4920 function t.plugins.bind(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4921 local function o(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4922 if e.bound then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4923 e:debug("Binding resource...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4924 e:send_iq(t.iq({type="set"}):tag("bind",{xmlns=a}):tag("resource"):text(e.resource),
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4925 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4926 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4927 local t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4928 :get_child("bind",a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4929 :get_child_text("jid");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4930 e.username,e.host,e.resource=i.split(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4931 e.jid,e.bound=t,true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4932 e:event("bind-success",{jid=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4933 elseif t.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4934 local a=t:child_with_name("error");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4935 local o,a,t=t:get_error();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4936 e:event("bind-failure",{error=a,text=t,type=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4937 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4938 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4939 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4940 e:hook("stream-features",o,200);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4941 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4942 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4943 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4944 package.preload['verse.plugins.session']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4945 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4946 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4947 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4948 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4949 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4950 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4951 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4952 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4953 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4954 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4955 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4956 local a=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4957 local o="urn:ietf:params:xml:ns:xmpp-session";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4958 function a.plugins.session(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4959 local function n(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4960 local t=t:get_child("session",o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4961 if t and not t:get_child("optional")then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4962 local function i(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4963 e:debug("Establishing Session...");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4964 e:send_iq(a.iq({type="set"}):tag("session",{xmlns=o}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4965 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4966 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4967 e:event("session-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4968 elseif t.attr.type=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4969 local t,a,o=t:get_error();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4970 e:event("session-failure",{error=a,text=o,type=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4971 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4972 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4973 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4974 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4975 e:hook("bind-success",i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4976 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4977 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4978 e:hook("stream-features",n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4979 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4980 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4981 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4982 package.preload['verse.plugins.legacy']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4983 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4984 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4985 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4986 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4987 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4988 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4989 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4990 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4991 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4992 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4993 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4994 local o=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4995 local n=require"util.uuid".generate;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4996 local i="jabber:iq:auth";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4997 function o.plugins.legacy(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4998 local function s(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4999 local a=t:get_child("query",i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5000 if t.attr.type~="result"or not a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5001 local o,a,t=t:get_error();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5002 e:debug("warn","%s %s: %s",o,a,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5003 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5004 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5005 username=e.username;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5006 password=e.password;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5007 resource=e.resource or n();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5008 digest=false,sequence=false,token=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5009 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5010 local o=o.iq({to=e.host,type="set"})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5011 :tag("query",{xmlns=i});
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5012 if#a>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5013 for a in a:childtags()do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5014 local a=a.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5015 local i=t[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5016 if i then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5017 o:tag(a):text(t[a]):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5018 elseif i==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5019 local t="feature-not-implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5020 e:event("authentication-failure",{condition=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5021 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5022 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5023 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5024 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5025 for t,e in pairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5026 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5027 o:tag(t):text(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5028 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5029 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5030 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5031 e:send_iq(o,function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5032 if a.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5033 e.resource=t.resource;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5034 e.jid=t.username.."@"..e.host.."/"..t.resource;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5035 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5036 e:event("bind-success",e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5037 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5038 local a,t,a=a:get_error();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5039 e:event("authentication-failure",{condition=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5040 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5041 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5042 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5043 local function a(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5044 if not t.version then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5045 e:send_iq(o.iq({type="get"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5046 :tag("query",{xmlns="jabber:iq:auth"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5047 :tag("username"):text(e.username),
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5048 s);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5049 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5050 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5051 e:hook("opened",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5052 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5053 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5054 package.preload['verse.plugins.compression']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5055 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5056 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5057 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5058 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5059 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5060 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5061 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5062 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5063 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5064 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5065 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5066 local t=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5067 local e=require"zlib";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5068 local a="http://jabber.org/features/compress"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5069 local a="http://jabber.org/protocol/compress"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5070 local o="http://etherx.jabber.org/streams";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5071 local n=9;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5072 local function i(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5073 local i,e=pcall(e.deflate,n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5074 if i==false then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5075 local t=t.stanza("failure",{xmlns=a}):tag("setup-failed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5076 o:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5077 o:error("Failed to create zlib.deflate filter: %s",tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5078 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5079 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5080 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5081 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5082 local function s(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5083 local i,e=pcall(e.inflate);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5084 if i==false then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5085 local t=t.stanza("failure",{xmlns=a}):tag("setup-failed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5086 o:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5087 o:error("Failed to create zlib.inflate filter: %s",tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5088 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5089 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5090 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5091 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5092 local function h(e,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5093 function e:send(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5094 local i,o,n=pcall(o,tostring(i),'sync');
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5095 if i==false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5096 e:close({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5097 condition="undefined-condition";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5098 text=o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5099 extra=t.stanza("failure",{xmlns=a}):tag("processing-failed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5100 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5101 e:warn("Compressed send failed: %s",tostring(o));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5102 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5103 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5104 e.conn:write(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5105 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5106 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5107 local function r(e,i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5108 local s=e.data
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5109 e.data=function(n,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5110 e:debug("Decompressing data...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5111 local i,o,h=pcall(i,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5112 if i==false then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5113 e:close({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5114 condition="undefined-condition";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5115 text=o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5116 extra=t.stanza("failure",{xmlns=a}):tag("processing-failed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5117 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5118 stream:warn("%s",tostring(o));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5119 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5120 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5121 return s(n,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5122 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5123 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5124 function t.plugins.compression(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5125 local function n(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5126 if not e.compressed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5127 local o=o:child_with_name("compression");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5128 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5129 for o in o:children()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5130 local o=o[1]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5131 if o=="zlib"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5132 e:send(t.stanza("compress",{xmlns=a}):tag("method"):text("zlib"))
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5133 e:debug("Enabled compression using zlib.")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5134 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5135 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5137 session:debug("Remote server supports no compression algorithm we support.")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5138 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5139 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5140 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5141 local function o(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5142 if a.name=="compressed"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5143 e:debug("Activating compression...")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5144 local a=i(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5145 if not a then return end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5146 local t=s(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5147 if not t then return end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5148 h(e,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5149 r(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5150 e.compressed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5151 e:reopen();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5152 elseif a.name=="failure"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5153 e:warn("Failed to establish compression");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5154 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5155 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5156 e:hook("stream-features",n,250);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5157 e:hook("stream/"..a,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5158 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5159 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5160 package.preload['verse.plugins.smacks']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5161 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5162 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5163 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5164 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5165 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5166 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5167 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5168 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5169 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5170 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5171 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5172 local i=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5173 local h=require"socket".gettime;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5174 local s="urn:xmpp:sm:3";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5175 function i.plugins.smacks(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5176 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5177 local a=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5178 local r=h();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5179 local o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5180 local n=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5181 local function d(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5182 if t.attr.xmlns=="jabber:client"or not t.attr.xmlns then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5183 n=n+1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5184 e:debug("Increasing handled stanzas to %d for %s",n,t:top_tag());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5185 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5186 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5187 local function l(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5188 if a.name and not a.attr.xmlns then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5189 t[#t+1]=tostring(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5190 r=h();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5191 if not o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5192 o=true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5193 e:debug("Waiting to send ack request...");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5194 i.add_task(1,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5195 if#t==0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5196 o=false;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5197 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5198 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5199 local a=h()-r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5200 if a<1 and#t<10 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5201 return 1-a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5202 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5203 e:debug("Time up, sending <r>...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5204 o=false;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5205 e:send(i.stanza("r",{xmlns=s}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5206 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5207 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5209 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5210 local function h()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5211 e:debug("smacks: connection lost");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5212 e.stream_management_supported=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5213 if e.resumption_token then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5214 e:debug("smacks: have resumption token, reconnecting in 1s...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5215 e.authenticated=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5216 i.add_task(1,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5217 e:connect(e.connect_host or e.host,e.connect_port or 5222);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5218 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5219 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5220 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5221 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5222 local function u()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5223 e.resumption_token=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5224 e:unhook("disconnected",h);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5225 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5226 local function r(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5227 if o.name=="r"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5228 e:debug("Ack requested... acking %d handled stanzas",n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5229 e:send(i.stanza("a",{xmlns=s,h=tostring(n)}));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5230 elseif o.name=="a"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5231 local o=tonumber(o.attr.h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5232 if o>a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5233 local i=#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5234 for a=a+1,o do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5235 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5236 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5237 e:debug("Received ack: New ack: "..o.." Last ack: "..a.." Unacked stanzas now: "..#t.." (was "..i..")");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5238 a=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5239 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5240 e:warn("Received bad ack for "..o.." when last ack was "..a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5241 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5242 elseif o.name=="enabled"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5243 if o.attr.id then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5244 e.resumption_token=o.attr.id;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5245 e:hook("closed",u,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5246 e:hook("disconnected",h,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5247 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5248 elseif o.name=="resumed"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5249 local o=tonumber(o.attr.h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5250 if o>a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5251 local i=#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5252 for a=a+1,o do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5253 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5254 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5255 e:debug("Received ack: New ack: "..o.." Last ack: "..a.." Unacked stanzas now: "..#t.." (was "..i..")");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5256 a=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5257 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5258 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5259 e:send(t[a]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5260 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5261 t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5262 e:debug("Resumed successfully");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5263 e:event("resumed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5264 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5265 e:warn("Don't know how to handle "..s.."/"..o.name);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5266 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5267 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5268 local function t()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5269 if not e.smacks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5270 e:debug("smacks: sending enable");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5271 e:send(i.stanza("enable",{xmlns=s,resume="true"}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5272 e.smacks=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5273 e:hook("stanza",d);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5274 e:hook("outgoing",l);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5275 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5276 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5277 local function a(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5278 if a:get_child("sm",s)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5279 e.stream_management_supported=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5280 if e.smacks and e.bound then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5281 e:debug("Resuming stream with %d handled stanzas",n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5282 e:send(i.stanza("resume",{xmlns=s,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5283 h=n,previd=e.resumption_token}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5284 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5285 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5286 e:hook("bind-success",t,1);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5287 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5289 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5290 e:hook("stream-features",a,250);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5291 e:hook("stream/"..s,r);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5292 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5293 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5294 package.preload['verse.plugins.keepalive']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5295 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5296 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5297 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5298 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5299 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5300 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5301 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5302 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5303 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5304 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5305 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5306 local t=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5307 function t.plugins.keepalive(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5308 e.keepalive_timeout=e.keepalive_timeout or 300;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5309 t.add_task(e.keepalive_timeout,function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5310 e.conn:write(" ");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5311 return e.keepalive_timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5312 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5313 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5314 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5315 package.preload['verse.plugins.disco']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5316 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5317 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5318 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5319 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5320 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5321 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5322 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5323 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5324 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5325 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5326 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5327 local a=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5328 local e=require("mime").b64;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5329 local e=require("util.hashes").sha1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5330 local r=require"util.caps".calculate_hash;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5331 local s="http://jabber.org/protocol/caps";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5332 local e="http://jabber.org/protocol/disco";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5333 local i=e.."#info";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5334 local o=e.."#items";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5335 function a.plugins.disco(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5336 e:add_plugin("presence");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5337 local n={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5338 __index=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5339 local a={identities={},features={}};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5340 if e=="identities"or e=="features"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5341 return t[false][e]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5342 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5343 t[e]=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5344 return a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5345 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5346 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5347 local t={
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5348 __index=function(a,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5349 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5350 a[t]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5351 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5352 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5353 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5354 e.disco={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5355 cache={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5356 info=setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5357 [false]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5358 identities={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5359 {category='client',type='pc',name='Verse'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5360 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5361 features={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5362 [s]=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5363 [i]=true,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5364 [o]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5365 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5366 },
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5367 },n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5368 items=setmetatable({[false]={}},t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5369 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5370 e.caps={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5371 e.caps.node='http://code.matthewwild.co.uk/verse/'
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5372 local function h(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5373 local o=e.disco.info[t or false];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5374 if t and t==e.caps.node.."#"..e.caps.hash then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5375 o=e.disco.info[false];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5376 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5377 local n,o=o.identities,o.features
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5378 local e=a.stanza("query",{
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5379 xmlns=i,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5380 node=t,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5381 });
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5382 for a,t in pairs(n)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5383 e:tag('identity',t):up()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5384 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5385 for t in pairs(o)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5386 e:tag('feature',{var=t}):up()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5387 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5388 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5389 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5390 setmetatable(e.caps,{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5391 __call=function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5392 local t=r(h())
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5393 e.caps.hash=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5394 return a.stanza('c',{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5395 xmlns=s,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5396 hash='sha-1',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5397 node=e.caps.node,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5398 ver=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5399 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5400 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5401 })
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5402 function e:set_identity(a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5403 self.disco.info[t or false].identities={a};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5404 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5405 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5406 function e:add_identity(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5407 local t=self.disco.info[t or false].identities;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5408 t[#t+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5409 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5410 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5411 function e:add_disco_feature(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5412 local t=t.var or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5413 self.disco.info[a or false].features[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5414 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5415 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5416 function e:remove_disco_feature(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5417 local t=t.var or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5418 self.disco.info[a or false].features[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5419 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5420 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5421 function e:add_disco_item(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5422 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5423 e[#e+1]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5424 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5425 function e:remove_disco_item(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5426 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5427 for t=#e,1,-1 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5428 if e[t]==a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5429 table.remove(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5430 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5431 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5432 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5433 function e:jid_has_identity(t,a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5434 local o=self.disco.cache[t];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5435 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5436 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5437 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5438 local t=self.disco.cache[t].identities;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5439 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5440 return t[a.."/"..e]or false;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5441 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5442 for e in pairs(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5443 if e:match("^(.*)/")==a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5444 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5445 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5446 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5447 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5448 function e:jid_supports(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5449 local e=self.disco.cache[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5450 if not e or not e.features then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5451 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5452 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5453 return e.features[t]or false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5454 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5455 function e:get_local_services(a,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5456 local e=self.disco.cache[self.host];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5457 if not(e)or not(e.items)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5458 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5459 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5460 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5461 for i,e in ipairs(e.items)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5462 if self:jid_has_identity(e.jid,a,o)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5463 table.insert(t,e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5464 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5465 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5466 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5467 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5468 function e:disco_local_services(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5469 self:disco_items(self.host,nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5470 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5471 return a({});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5473 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5474 local function o()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5475 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5476 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5477 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5478 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5479 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5480 for a,t in ipairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5481 if t.jid then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5482 e=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5483 self:disco_info(t.jid,nil,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5484 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5485 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5486 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5487 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5488 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5489 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5490 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5491 function e:disco_info(e,t,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5492 local a=a.iq({to=e,type="get"})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5493 :tag("query",{xmlns=i,node=t});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5494 self:send_iq(a,function(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5495 if o.attr.type=="error"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5496 return s(nil,o:get_error());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5497 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5498 local n,a={},{};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5499 for e in o:get_child("query",i):childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5500 if e.name=="identity"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5501 n[e.attr.category.."/"..e.attr.type]=e.attr.name or true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5502 elseif e.name=="feature"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5503 a[e.attr.var]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5504 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5505 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5506 if not self.disco.cache[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5507 self.disco.cache[e]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5508 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5509 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5510 if not self.disco.cache[e].nodes[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5511 self.disco.cache[e].nodes[t]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5512 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5513 self.disco.cache[e].nodes[t].identities=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5514 self.disco.cache[e].nodes[t].features=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5515 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5516 self.disco.cache[e].identities=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5517 self.disco.cache[e].features=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5518 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5519 return s(self.disco.cache[e]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5520 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5521 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5522 function e:disco_items(t,i,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5523 local a=a.iq({to=t,type="get"})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5524 :tag("query",{xmlns=o,node=i});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5525 self:send_iq(a,function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5526 if e.attr.type=="error"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5527 return n(nil,e:get_error());
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5528 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5529 local a={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5530 for e in e:get_child("query",o):childtags()do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5531 if e.name=="item"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5532 table.insert(a,{
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5533 name=e.attr.name;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5534 jid=e.attr.jid;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5535 node=e.attr.node;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5536 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5537 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5538 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5539 if not self.disco.cache[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5540 self.disco.cache[t]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5541 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5542 if i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5543 if not self.disco.cache[t].nodes[i]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5544 self.disco.cache[t].nodes[i]={nodes={}};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5545 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5546 self.disco.cache[t].nodes[i].items=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5547 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5548 self.disco.cache[t].items=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5549 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5550 return n(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5551 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5552 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5553 e:hook("iq/"..i,function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5554 local o=t.tags[1];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5555 if t.attr.type=='get'and o.name=="query"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5556 local o=h(o.attr.node);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5557 local t=a.reply(t):add_child(o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5558 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5559 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5560 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5561 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5562 e:hook("iq/"..o,function(i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5563 local t=i.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5564 if i.attr.type=='get'and t.name=="query"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5565 local n=e.disco.items[t.attr.node or false];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5566 local t=a.reply(i):tag('query',{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5567 xmlns=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5568 node=t.attr.node
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5569 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5570 for a=1,#n do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5571 t:tag('item',n[a]):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5572 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5573 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5574 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5576 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5577 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5578 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5579 if t then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5580 t=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5581 local function i(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5582 local a=e.disco.cache[t];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5583 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5584 for a in pairs(a.identities)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5585 local o,a=a:match("^(.*)/(.*)$");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5586 print(t,o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5587 e:event("disco/service-discovered/"..o,{
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5588 type=a,jid=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5589 });
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5590 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5591 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5592 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5593 e:disco_info(e.host,nil,function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5594 i(e.host);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5595 end);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5596 e:disco_local_services(function(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5597 for a,t in ipairs(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5598 i(t.jid);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5599 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5600 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5601 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5602 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5603 end,50);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5604 e:hook("presence-out",function(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5605 if not t:get_child("c",s)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5606 t:reset():add_child(e:caps()):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5607 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5608 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5609 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5610 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5611 package.preload['verse.plugins.version']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5612 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5613 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5614 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5615 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5616 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5617 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5618 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5619 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5620 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5621 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5622 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5623 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5624 local a="jabber:iq:version";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5625 local function i(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5626 e.name=t.name;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5627 e.version=t.version;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5628 e.platform=t.platform;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5629 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5630 function o.plugins.version(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5631 e.version={set=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5632 e:hook("iq/"..a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5633 if t.attr.type~="get"then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5634 local t=o.reply(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5635 :tag("query",{xmlns=a});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5636 if e.version.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5637 t:tag("name"):text(tostring(e.version.name)):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5638 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5639 if e.version.version then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5640 t:tag("version"):text(tostring(e.version.version)):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5641 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5642 if e.version.platform then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5643 t:tag("os"):text(e.version.platform);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5644 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5645 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5646 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5647 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5648 function e:query_version(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5649 t=t or function(e)return self:event("version/response",e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5650 self:send_iq(o.iq({type="get",to=e})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5651 :tag("query",{xmlns=a}),
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5652 function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5653 if o.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5654 local e=o:get_child("query",a);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5655 local a=e and e:get_child_text("name");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5656 local o=e and e:get_child_text("version");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5657 local e=e and e:get_child_text("os");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5658 t({
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5659 name=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5660 version=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5661 platform=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5662 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5663 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5664 local a,e,o=o:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5665 t({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5666 error=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5667 condition=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5668 text=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5669 type=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5670 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5671 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5672 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5673 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5674 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5675 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5676 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5677 package.preload['verse.plugins.ping']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5678 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5679 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5680 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5681 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5682 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5683 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5684 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5685 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5686 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5687 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5688 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5689 local a=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5690 local n=require"socket".gettime;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5691 local i="urn:xmpp:ping";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5692 function a.plugins.ping(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5693 function e:ping(t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5694 local s=n();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5695 e:send_iq(a.iq{to=t,type="get"}:tag("ping",{xmlns=i}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5696 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5697 if e.attr.type=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5698 local i,e,a=e:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5699 if e~="service-unavailable"and e~="feature-not-implemented"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5700 o(nil,t,{type=i,condition=e,text=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5701 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5702 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5703 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5704 o(n()-s,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5705 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5706 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5707 e:hook("iq/"..i,function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5708 return e:send(a.reply(t));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5709 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5710 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5711 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5712 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5713 package.preload['verse.plugins.uptime']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5714 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5715 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5716 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5717 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5718 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5719 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5720 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5721 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5722 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5723 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5724 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5725 local o=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5726 local t="jabber:iq:last";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5727 local function a(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5728 e.starttime=t.starttime;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5729 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5730 function o.plugins.uptime(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5731 e.uptime={set=a};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5732 e:hook("iq/"..t,function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5733 if a.attr.type~="get"then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5734 local t=o.reply(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5735 :tag("query",{seconds=tostring(os.difftime(os.time(),e.uptime.starttime)),xmlns=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5736 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5737 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5738 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5739 function e:query_uptime(i,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5740 a=a or function(t)return e:event("uptime/response",t);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5741 e:send_iq(o.iq({type="get",to=i})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5742 :tag("query",{xmlns=t}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5743 function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5744 local t=e:get_child("query",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5745 if e.attr.type=="result"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5746 local e=tonumber(t.attr.seconds);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5747 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5748 seconds=e or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5749 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5750 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5751 local o,t,e=e:get_error();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5752 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5753 error=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5754 condition=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5755 text=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5756 type=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5757 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5758 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5759 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5760 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5761 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5762 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5763 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5764 package.preload['verse.plugins.blocking']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5765 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5766 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5767 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5768 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5769 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5770 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5771 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5772 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5773 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5774 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5775 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5776 local o=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5777 local a="urn:xmpp:blocking";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5778 function o.plugins.blocking(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5779 e.blocking={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5780 function e.blocking:block_jid(i,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5781 e:send_iq(o.iq{type="set"}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5782 :tag("block",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5783 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5784 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5785 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5786 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5787 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5788 function e.blocking:unblock_jid(i,t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5789 e:send_iq(o.iq{type="set"}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5790 :tag("unblock",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5791 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5792 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5793 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5794 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5795 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5796 function e.blocking:unblock_all_jids(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5797 e:send_iq(o.iq{type="set"}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5798 :tag("unblock",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5799 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5800 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5801 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5802 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5803 function e.blocking:get_blocked_jids(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5804 e:send_iq(o.iq{type="get"}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5805 :tag("blocklist",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5806 ,function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5807 local a=e:get_child("blocklist",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5808 if not a then return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5809 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5810 for t in a:childtags()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5811 e[#e+1]=t.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5812 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5813 return t and t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5814 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5815 ,function(e)return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5816 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5817 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5818 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5819 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5820 package.preload['verse.plugins.jingle']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5821 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5822 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5823 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5824 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5825 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5826 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5827 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5828 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5829 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5830 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5831 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5832 local o=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5833 local e=require"util.timer";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5834 local n=require"util.uuid".generate;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5835 local i="urn:xmpp:jingle:1";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5836 local r="urn:xmpp:jingle:errors:1";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5837 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5838 t.__index=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5839 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5840 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5841 function o.plugins.jingle(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5842 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5843 e:add_disco_feature(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5844 end,10);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5845 function e:jingle(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5846 return o.eventable(setmetatable(base or{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5847 role="initiator";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5848 peer=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5849 sid=n();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5850 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5851 },t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5852 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5853 function e:register_jingle_transport(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5854 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5855 function e:register_jingle_content_type(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5857 local function u(n)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5858 local s=n:get_child("jingle",i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5859 local a=s.attr.sid;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5860 local h=s.attr.action;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5861 local a=e:event("jingle/"..a,n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5862 if a==true then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5863 e:send(o.reply(n));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5864 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5865 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5866 if h~="session-initiate"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5867 local t=o.error_reply(n,"cancel","item-not-found")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5868 :tag("unknown-session",{xmlns=r}):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5869 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5870 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5871 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5872 local l=s.attr.sid;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5873 local a=o.eventable{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5874 role="receiver";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5875 peer=n.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5876 sid=l;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5877 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5878 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5879 setmetatable(a,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5880 local h;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5881 local d,r;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5882 for t in s:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5883 if t.name=="content"and t.attr.xmlns==i then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5884 local o=t:child_with_name("description");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5885 local i=o.attr.xmlns;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5886 if i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5887 local e=e:event("jingle/content/"..i,a,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5888 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5889 d=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5890 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5891 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5892 local o=t:child_with_name("transport");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5893 local i=o.attr.xmlns;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5894 r=e:event("jingle/transport/"..i,a,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5895 if d and r then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5896 h=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5897 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5898 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5899 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5900 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5901 if not d then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5902 e:send(o.error_reply(n,"cancel","feature-not-implemented","The specified content is not supported"));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5903 return true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5904 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5905 if not r then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5906 e:send(o.error_reply(n,"cancel","feature-not-implemented","The specified transport is not supported"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5907 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5908 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5909 e:send(o.reply(n));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5910 a.content_tag=h;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5911 a.creator,a.name=h.attr.creator,h.attr.name;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5912 a.content,a.transport=d,r;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5913 function a:decline()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5914 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5915 e:hook("jingle/"..l,function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5916 if e.attr.from~=a.peer then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5917 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5918 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5919 local e=e:get_child("jingle",i);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5920 return a:handle_command(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5921 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5922 e:event("jingle",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5923 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5924 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5925 function t:handle_command(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5926 local t=a.attr.action;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5927 e:debug("Handling Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5928 if t=="session-terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5929 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5930 elseif t=="session-accept"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5931 self:handle_accepted(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5932 elseif t=="transport-info"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5933 e:debug("Handling transport-info");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5934 self.transport:info_received(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5935 elseif t=="transport-replace"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5936 e:error("Peer wanted to swap transport, not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5937 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5938 e:warn("Unhandled Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5939 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5940 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5941 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5942 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5943 function t:send_command(a,t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5944 local t=o.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5945 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5946 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5947 sid=self.sid,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5948 action=a,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5949 initiator=self.role=="initiator"and self.stream.jid or nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5950 responder=self.role=="responder"and self.jid or nil,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5951 }):add_child(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5952 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5953 self.stream:send(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5954 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5955 self.stream:send_iq(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5956 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5957 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5958 function t:accept(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5959 local t=o.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5960 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5961 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5962 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5963 action="session-accept",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5964 responder=e.jid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5965 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5966 :tag("content",{creator=self.creator,name=self.name});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5967 local o=self.content:generate_accept(self.content_tag:child_with_name("description"),a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5968 t:add_child(o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5969 local a=self.transport:generate_accept(self.content_tag:child_with_name("transport"),a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5970 t:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5971 local a=self;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5972 e:send_iq(t,function(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5973 if t.attr.type=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5974 local a,t,a=t:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5975 e:error("session-accept rejected: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5976 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5977 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5978 a.transport:connect(function(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5979 e:warn("CONNECTED (receiver)!!!");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5980 a.state="active";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5981 a:event("connected",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5982 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5983 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5984 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5985 e:hook("iq/"..i,u);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5986 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5987 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5988 function t:offer(t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5989 local e=o.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5990 :tag("jingle",{xmlns=i,action="session-initiate",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5991 initiator=self.stream.jid,sid=self.sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5992 e:tag("content",{creator=self.role,name=t});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5993 local t=self.stream:event("jingle/describe/"..t,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5994 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5995 return false,"Unknown content type";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5996 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5997 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5998 local t=self.stream:event("jingle/transport/".."urn:xmpp:jingle:transports:s5b:1",self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5999 self.transport=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6000 e:add_child(t:generate_initiate());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6001 self.stream:debug("Hooking %s","jingle/"..self.sid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6002 self.stream:hook("jingle/"..self.sid,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6003 if e.attr.from~=self.peer then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6004 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6006 local e=e:get_child("jingle",i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6007 return self:handle_command(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6008 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6009 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6010 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6011 self.state="terminated";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6012 local e,t,a=e:get_error();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6013 return self:event("error",{type=e,condition=t,text=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6014 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6015 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6016 self.state="pending";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6017 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6018 function t:terminate(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6019 local e=o.stanza("reason"):tag(e or"success");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6020 self:send_command("session-terminate",e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6021 self.state="terminated";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6022 self.transport:disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6023 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6024 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6025 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6026 function t:destroy()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6027 self:event("terminated");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6028 self.stream:unhook("jingle/"..self.sid,self.handle_command);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6029 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6030 function t:handle_accepted(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6031 local e=e:child_with_name("transport");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6032 self.transport:handle_accepted(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6033 self.transport:connect(function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6034 self.stream:debug("CONNECTED (initiator)!")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6035 self.state="active";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6036 self:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6037 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6038 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6039 function t:set_source(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6040 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6041 local e,i=a();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6042 if e and e~=""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6043 self.transport.conn:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6044 elseif e==""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6045 return t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6046 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6047 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6048 self:terminate();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6049 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6050 self.transport.conn:unhook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6051 a=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6052 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6053 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6054 self.transport.conn:hook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6055 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6056 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6057 function t:set_sink(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6058 self.transport.conn:hook("incoming-raw",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6059 self.transport.conn:hook("disconnected",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6060 self.stream:debug("Closing sink...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6061 local e=e.reason;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6062 if e=="closed"then e=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6063 t(nil,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6064 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6065 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6066 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6067 package.preload['verse.plugins.jingle_ft']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6068 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6069 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6070 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6071 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6072 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6073 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6074 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6075 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6076 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6077 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6078 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6079 local i=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6080 local o=require"ltn12";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6081 local s=package.config:sub(1,1);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6082 local a="urn:xmpp:jingle:apps:file-transfer:4";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6083 function i.plugins.jingle_ft(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6084 t:hook("ready",function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6085 t:add_disco_feature(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6086 end,10);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6087 local n={type="file"};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6088 function n:generate_accept(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6089 if e and e.save_file then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6090 self.jingle:hook("connected",function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6091 local e=o.sink.file(io.open(e.save_file,"w+"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6092 self.jingle:set_sink(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6093 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6094 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6095 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6096 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6097 local n={__index=n};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6098 t:hook("jingle/content/"..a,function(t,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6099 local e=e:get_child("file");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6100 local e={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6101 name=e:get_child_text("name");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6102 size=tonumber(e:get_child_text("size"));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6103 desc=e:get_child_text("desc");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6104 date=e:get_child_text("date");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6105 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6106 return setmetatable({jingle=t,file=e},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6107 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6108 t:hook("jingle/describe/file",function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6109 local t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6110 if e.timestamp then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6111 t=os.date("!%Y-%m-%dT%H:%M:%SZ",e.timestamp);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6112 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6113 return i.stanza("description",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6114 :tag("file")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6115 :tag("name"):text(e.filename):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6116 :tag("size"):text(tostring(e.size)):up()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6117 :tag("date"):text(t):up()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6118 :tag("desc"):text(e.description):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6119 :up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6120 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6121 function t:send_file(i,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6122 local e,a=io.open(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6123 if not e then return e,a;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6124 local a=e:seek("end",0);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6125 e:seek("set",0);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6126 local o=o.source.file(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6127 local e=self:jingle(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6128 e:offer("file",{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6129 filename=t:match("[^"..s.."]+$");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6130 size=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6131 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6132 e:hook("connected",function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6133 e:set_source(o,true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6134 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6135 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6137 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6138 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6139 package.preload['verse.plugins.jingle_s5b']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6140 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6141 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6142 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6143 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6144 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6145 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6146 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6147 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6148 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6149 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6150 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6151 local t=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6152 local o="urn:xmpp:jingle:transports:s5b:1";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6153 local r="http://jabber.org/protocol/bytestreams";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6154 local h=require"util.hashes".sha1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6155 local s=require"util.uuid".generate;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6156 local function d(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6157 local function a()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6158 e:unhook("connected",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6159 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6160 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6161 local function i(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6162 e:unhook("incoming-raw",i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6163 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6164 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6165 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6166 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6167 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6168 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6169 local function o(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6170 e:unhook("incoming-raw",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6171 if a~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6172 local t="version-mismatch";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6173 if a:sub(1,1)=="\005"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6174 t="authentication-failure";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6176 return e:event("error",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6177 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6178 e:send(string.char(5,1,0,3,#t)..t.."\0\0");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6179 e:hook("incoming-raw",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6180 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6181 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6182 e:hook("connected",a,200);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6183 e:hook("incoming-raw",o,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6184 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6185 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6186 local function n(a,e,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6187 local e=t.new(nil,{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6188 streamhosts=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6189 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6190 });
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6191 local function t(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6192 if o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6193 return a(nil,o.reason);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6194 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6195 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6196 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6197 e:debug("Attempting to connect to "..e.streamhosts[e.current_host].host..":"..e.streamhosts[e.current_host].port.."...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6198 local t,a=e:connect(
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6199 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6200 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6201 );
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6202 if not t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6203 e:debug("Error connecting to proxy (%s:%s): %s",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6204 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6205 e.streamhosts[e.current_host].port,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6206 a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6207 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6208 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6209 e:debug("Connecting...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6210 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6211 d(e,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6212 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6213 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6214 e:unhook("disconnected",t);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6215 return a(nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6216 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6217 e:hook("disconnected",t,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6218 e:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6219 e:unhook("disconnected",t);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6220 a(e.streamhosts[e.current_host],e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6221 end,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6222 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6223 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6224 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6225 function t.plugins.jingle_s5b(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6226 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6227 e:add_disco_feature(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6228 end,10);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6229 local a={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6230 function a:generate_initiate()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6231 self.s5b_sid=s();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6232 local a=t.stanza("transport",{xmlns=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6233 mode="tcp",sid=self.s5b_sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6234 local t=0;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6235 for i,o in pairs(e.proxy65.available_streamhosts)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6236 t=t+1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6237 a:tag("candidate",{jid=i,host=o.host,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6238 port=o.port,cid=i,priority=t,type="proxy"}):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6239 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6240 e:debug("Have %d proxies",t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6241 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6242 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6243 function a:generate_accept(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6244 local a={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6245 self.s5b_peer_candidates=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6246 self.s5b_mode=e.attr.mode or"tcp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6247 self.s5b_sid=e.attr.sid or self.jingle.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6248 for e in e:childtags()do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6249 a[e.attr.cid]={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6250 type=e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6251 jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6252 host=e.attr.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6253 port=tonumber(e.attr.port)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6254 priority=tonumber(e.attr.priority)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6255 cid=e.attr.cid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6256 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6257 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6258 local e=t.stanza("transport",{xmlns=o});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6259 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6260 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6261 function a:connect(i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6262 e:warn("Connecting!");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6263 local a={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6264 for t,e in pairs(self.s5b_peer_candidates or{})do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6265 a[#a+1]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6266 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6267 if#a>0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6268 self.connecting_peer_candidates=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6269 local function s(e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6270 self.jingle:send_command("transport-info",t.stanza("content",{creator=self.creator,name=self.name})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6271 :tag("transport",{xmlns=o,sid=self.s5b_sid})
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6272 :tag("candidate-used",{cid=e.cid}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6273 self.onconnect_callback=i;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6274 self.conn=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6275 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6276 local e=h(self.s5b_sid..self.peer..e.jid,true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6277 n(s,a,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6278 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6279 e:warn("Actually, I'm going to wait for my peer to tell me its streamhost...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6280 self.onconnect_callback=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6281 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6282 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6283 function a:info_received(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6284 e:warn("Info received");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6285 local s=a:child_with_name("content");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6286 local i=s:child_with_name("transport");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6287 if i:get_child("candidate-used")and not self.connecting_peer_candidates then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6288 local a=i:child_with_name("candidate-used");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6289 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6290 local function i(i,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6291 if self.jingle.role=="initiator"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6292 self.jingle.stream:send_iq(t.iq({to=i.jid,type="set"})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6293 :tag("query",{xmlns=r,sid=self.s5b_sid})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6294 :tag("activate"):text(self.jingle.peer),function(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6295 if i.attr.type=="result"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6296 self.jingle:send_command("transport-info",t.stanza("content",s.attr)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6297 :tag("transport",{xmlns=o,sid=self.s5b_sid})
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6298 :tag("activated",{cid=a.attr.cid}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6299 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6300 self.onconnect_callback(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6301 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6302 self.jingle.stream:error("Failed to activate bytestream");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6303 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6304 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6305 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6306 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6307 self.jingle.stream:debug("CID: %s",self.jingle.stream.proxy65.available_streamhosts[a.attr.cid]);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6308 local t={
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6309 self.jingle.stream.proxy65.available_streamhosts[a.attr.cid];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6310 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6311 local e=h(self.s5b_sid..e.jid..self.peer,true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6312 n(i,t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6313 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6314 elseif i:get_child("activated")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6315 self.onconnect_callback(self.conn);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6317 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6318 function a:disconnect()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6319 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6320 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6321 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6322 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6323 function a:handle_accepted(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6324 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6325 local t={__index=a};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6326 e:hook("jingle/transport/"..o,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6327 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6328 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6329 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6330 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6331 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6332 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6333 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6334 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6335 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6336 package.preload['verse.plugins.proxy65']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6337 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6338 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6339 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6340 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6341 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6342 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6343 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6344 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6345 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6346 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6347 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6348 local a=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6349 local d=require"util.uuid";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6350 local r=require"util.hashes".sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6351 local n={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6352 n.__index=n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6353 local i="http://jabber.org/protocol/bytestreams";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6354 local s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6355 function a.plugins.proxy65(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6356 t.proxy65=setmetatable({stream=t},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6357 t.proxy65.available_streamhosts={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6358 local e=0;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6359 t:hook("disco/service-discovered/proxy",function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6360 if o.type=="bytestreams"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6361 e=e+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6362 t:send_iq(a.iq({to=o.jid,type="get"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6363 :tag("query",{xmlns=i}),function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6364 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6365 if a.attr.type=="result"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6366 local e=a:get_child("query",i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6367 :get_child("streamhost").attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6368 t.proxy65.available_streamhosts[e.jid]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6369 jid=e.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6370 host=e.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6371 port=tonumber(e.port);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6372 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6373 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6374 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6375 t:event("proxy65/discovered-proxies",t.proxy65.available_streamhosts);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6376 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6377 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6378 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6379 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6380 t:hook("iq/"..i,function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6381 local e=a.new(nil,{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6382 initiator_jid=o.attr.from,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6383 streamhosts={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6384 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6385 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6386 for t in o.tags[1]:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6387 if t.name=="streamhost"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6388 table.insert(e.streamhosts,t.attr);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6389 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6390 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6391 local function i()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6392 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6393 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6394 e:connect(
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6395 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6396 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6397 );
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6398 s(t,e,o.tags[1].attr.sid,o.attr.from,t.jid);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6399 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6400 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6401 e:unhook("disconnected",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6402 t:send(a.error_reply(o,"cancel","item-not-found"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6403 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6404 function e:accept()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6405 e:hook("disconnected",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6406 e:hook("connected",function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6407 e:unhook("disconnected",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6408 local e=a.reply(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6409 :tag("query",o.tags[1].attr)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6410 :tag("streamhost-used",{jid=e.streamhosts[e.current_host].jid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6411 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6412 end,100);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6413 i();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6414 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6415 function e:refuse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6416 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6417 t:event("proxy65/request",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6418 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6419 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6420 function n:new(t,h)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6421 local e=a.new(nil,{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6422 target_jid=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6423 bytestream_sid=d.generate();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6424 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6425 local o=a.iq{type="set",to=t}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6426 :tag("query",{xmlns=i,mode="tcp",sid=e.bytestream_sid});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6427 for t,e in ipairs(h or self.proxies)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6428 o:tag("streamhost",e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6429 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6430 self.stream:send_iq(o,function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6431 if o.attr.type=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6432 local a,t,o=o:get_error();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6433 e:event("connection-failed",{conn=e,type=a,condition=t,text=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6434 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6435 local o=o.tags[1]:get_child("streamhost-used");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6436 e.streamhost_jid=o.attr.jid;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6437 local n,o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6438 for a,t in ipairs(h or self.proxies)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6439 if t.jid==e.streamhost_jid then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6440 n,o=t.host,t.port;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6441 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6443 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6444 e:connect(n,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6445 local function o()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6446 e:unhook("connected",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6447 local t=a.iq{to=e.streamhost_jid,type="set"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6448 :tag("query",{xmlns=i,sid=e.bytestream_sid})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6449 :tag("activate"):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6450 self.stream:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6451 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6452 e:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6454 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6455 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6456 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6457 e:hook("connected",o,100);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6458 s(self.stream,e,e.bytestream_sid,self.stream.jid,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6459 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6460 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6461 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6462 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6463 function s(i,e,a,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6464 local a=r(a..t..o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6465 local function t()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6466 e:unhook("connected",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6467 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6468 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6469 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6470 e:unhook("incoming-raw",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6471 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6472 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6474 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6475 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6476 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6477 local function i(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6478 e:unhook("incoming-raw",i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6479 if t~="\005\000"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6480 local a="version-mismatch";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6481 if t:sub(1,1)=="\005"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6482 a="authentication-failure";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6483 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6484 return e:event("error",a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6485 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6486 e:send(string.char(5,1,0,3,#a)..a.."\0\0");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6487 e:hook("incoming-raw",o,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6488 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6489 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6490 e:hook("connected",t,200);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6491 e:hook("incoming-raw",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6492 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6493 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6494 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6495 package.preload['verse.plugins.jingle_ibb']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6496 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6497 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6498 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6499 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6500 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6501 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6502 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6503 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6504 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6505 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6506 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6507 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6508 local i=require"util.encodings".base64;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6509 local s=require"util.uuid".generate;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6510 local n="urn:xmpp:jingle:transports:ibb:1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6511 local o="http://jabber.org/protocol/ibb";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6512 assert(i.encode("This is a test.")=="VGhpcyBpcyBhIHRlc3Qu","Base64 encoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6513 assert(i.decode("VGhpcyBpcyBhIHRlc3Qu")=="This is a test.","Base64 decoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6514 local t=table.concat
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6515 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6516 local t={__index=a};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6517 local function h(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6518 local t=setmetatable({stream=a},t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6519 t=e.eventable(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6520 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6521 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6522 function a:initiate(e,t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6523 self.block=2048;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6524 self.stanza=a or'iq';
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6525 self.peer=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6526 self.sid=t or tostring(self):match("%x+$");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6527 self.iseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6528 self.oseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6529 local e=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6530 return self:feed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6531 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6532 self.feeder=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6533 print("Hooking incomming IQs");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6534 local t=self.stream;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6535 t:hook("iq/"..o,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6536 if a=="message"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6537 t:hook("message",e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6538 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6539 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6540 function a:open(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6541 self.stream:send_iq(e.iq{to=self.peer,type="set"}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6542 :tag("open",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6543 xmlns=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6544 ["block-size"]=self.block,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6545 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6546 stanza=self.stanza
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6547 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6548 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6549 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6550 if e.attr.type~="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6551 t(true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6552 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6553 t(false,e:get_error())
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6554 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6556 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6557 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6558 function a:send(n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6559 local a=self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6560 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6561 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6562 t=e.iq{type="set",to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6563 elseif a=="message"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6564 t=e.message{to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6565 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6566 local e=self.oseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6567 self.oseq=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6568 t:tag("data",{xmlns=o,sid=self.sid,seq=e})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6569 :text(i.encode(n));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6570 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6571 self.stream:send_iq(t,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6572 self:event(e.attr.type=="result"and"drained"or"error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6573 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6574 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6575 stream:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6576 self:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6577 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6578 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6579 function a:feed(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6580 if t.attr.from~=self.peer then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6581 local a=t[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6582 if a.attr.sid~=self.sid then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6583 local n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6584 if a.name=="open"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6585 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6586 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6587 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6588 elseif a.name=="data"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6589 local o=t:get_child_text("data",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6590 local a=tonumber(a.attr.seq);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6591 local n=self.iseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6592 if o and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6593 if a~=n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6594 self.stream:send(e.error_reply(t,"cancel","not-acceptable","Wrong sequence. Packet lost?"))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6595 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6596 self:event("error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6597 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6598 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6599 self.iseq=a+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6600 local a=i.decode(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6601 if self.stanza=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6602 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6603 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6604 self:event("incoming-raw",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6605 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6606 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6607 elseif a.name=="close"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6608 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6609 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6610 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6611 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6612 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6613 function a:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6614 self.stream:unhook("iq/"..o,self.feeder)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6615 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6616 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6617 function e.plugins.jingle_ibb(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6618 a:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6619 a:add_disco_feature(n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6620 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6621 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6622 function t:_setup()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6623 local e=h(self.stream);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6624 e.sid=self.sid or e.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6625 e.stanza=self.stanza or e.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6626 e.block=self.block or e.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6627 e:initiate(self.peer,self.sid,self.stanza);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6628 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6629 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6630 function t:generate_initiate()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6631 print("ibb:generate_initiate() as "..self.role);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6632 local t=s();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6633 self.sid=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6634 self.stanza='iq';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6635 self.block=2048;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6636 local e=e.stanza("transport",{xmlns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6637 sid=self.sid,stanza=self.stanza,["block-size"]=self.block});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6638 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6639 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6640 function t:generate_accept(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6641 print("ibb:generate_accept() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6642 local e=t.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6643 self.sid=e.sid or self.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6644 self.stanza=e.stanza or self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6645 self.block=e["block-size"]or self.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6646 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6647 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6648 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6649 function t:connect(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6650 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6651 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6652 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6653 local e=self.conn;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6654 print("ibb:connect() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6655 if self.role=="initiator"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6656 e:open(function(a,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6657 assert(a,table.concat({...},", "));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6658 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6659 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6660 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6661 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6662 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6663 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6664 function t:info_received(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6665 print("ibb:info_received()");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6666 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6667 function t:disconnect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6668 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6669 self.conn:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6670 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6671 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6672 function t:handle_accepted(e)end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6673 local t={__index=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6674 a:hook("jingle/transport/"..n,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6675 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6676 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6677 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6678 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6679 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6680 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6681 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6682 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6683 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6684 package.preload['verse.plugins.pubsub']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6685 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6686 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6687 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6688 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6689 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6690 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6691 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6692 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6693 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6694 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6695 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6696 local i=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6697 local n=table.insert;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6698 local o="http://jabber.org/protocol/pubsub";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6699 local h="http://jabber.org/protocol/pubsub#owner";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6700 local a="http://jabber.org/protocol/pubsub#event";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6701 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6702 local s={__index=e};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6703 function i.plugins.pubsub(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6704 e.pubsub=setmetatable({stream=e},s);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6705 e:hook("message",function(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6706 local o=t.attr.from;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6707 for t in t:childtags("event",a)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6708 local t=t:get_child("items");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6709 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6710 local a=t.attr.node;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6711 for t in t:childtags("item")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6712 e:event("pubsub/event",{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6713 from=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6714 node=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6715 item=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6716 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6717 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6718 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6719 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6720 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6721 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6722 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6723 function e:create(e,a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6724 return self:service(e):node(a):create(nil,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6725 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6726 function e:subscribe(a,e,o,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6727 return self:service(a):node(e):subscribe(o,nil,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6728 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6729 function e:publish(e,a,o,i,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6730 return self:service(e):node(a):publish(o,nil,i,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6731 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6732 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6733 local t={__index=a};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6734 function e:service(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6735 return setmetatable({stream=self.stream,service=e},t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6736 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6737 local function t(h,e,r,a,s,n,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6738 local e=i.iq{type=h or"get",to=e}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6739 :tag("pubsub",{xmlns=r or o})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6740 if a then e:tag(a,{node=s,jid=n});end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6741 if t then e:tag("item",{id=t~=true and t or nil});end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6742 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6743 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6744 function a:subscriptions(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6745 self.stream:send_iq(t(nil,self.service,nil,"subscriptions")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6746 ,a and function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6747 if t.attr.type=="result"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6748 local e=t:get_child("pubsub",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6749 local e=e and e:get_child("subscriptions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6750 local o={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6751 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6752 for t in e:childtags("subscription")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6753 local e=self:node(t.attr.node)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6754 e.subscription=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6755 e.subscribed_jid=t.attr.jid;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6756 n(o,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6757 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6758 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6759 a(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6760 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6761 a(false,t:get_error());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6762 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6763 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6764 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6765 function a:affiliations(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6766 self.stream:send_iq(t(nil,self.service,nil,"affiliations")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6767 ,a and function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6768 if e.attr.type=="result"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6769 local e=e:get_child("pubsub",o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6770 local e=e and e:get_child("affiliations")or{};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6771 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6772 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6773 for e in e:childtags("affiliation")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6774 local a=self:node(e.attr.node)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6775 a.affiliation=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6776 n(t,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6777 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6778 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6779 a(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6780 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6781 a(false,e:get_error());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6782 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6783 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6784 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6785 function a:nodes(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6786 self.stream:disco_items(self.service,nil,function(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6787 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6788 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6789 e[t]=self:node(e[t].node);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6790 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6791 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6792 a(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6793 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6794 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6795 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6796 local o={__index=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6797 function a:node(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6798 return setmetatable({stream=self.stream,service=self.service,node=e},o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6799 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6800 function s:__call(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6801 local t=self:service(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6802 return e and t:node(e)or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6804 function e:hook(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6805 self._hooks=self._hooks or setmetatable({},{__mode='kv'});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6806 local function t(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6807 if(not e.service or e.from==self.service)and e.node==self.node then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6808 return a(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6809 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6810 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6811 self._hooks[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6812 self.stream:hook("pubsub/event",t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6813 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6814 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6815 function e:unhook(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6816 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6817 local e=self._hooks[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6818 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6819 elseif self._hooks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6820 for e in pairs(self._hooks)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6821 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6822 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6823 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6824 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6825 function e:create(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6826 if a~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6827 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6828 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6829 self.stream:send_iq(t("set",self.service,nil,"create",self.node),e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6830 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6831 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6832 function e:configure(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6833 if e~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6834 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6835 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6836 self.stream:send_iq(t("set",self.service,nil,e==nil and"default"or"configure",self.node),a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6837 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6838 function e:publish(a,e,o,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6839 if e~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6840 error("Node configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6841 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6842 self.stream:send_iq(t("set",self.service,nil,"publish",self.node,nil,a or true)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6843 :add_child(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6844 ,i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6845 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6846 function e:subscribe(e,o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6847 e=e or self.stream.jid;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6848 if o~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6849 error("Subscription configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6850 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6851 self.stream:send_iq(t("set",self.service,nil,"subscribe",self.node,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6852 ,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6853 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6854 function e:subscription(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6855 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6857 function e:affiliation(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6858 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6859 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6860 function e:unsubscribe(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6861 e=e or self.subscribed_jid or self.stream.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6862 self.stream:send_iq(t("set",self.service,nil,"unsubscribe",self.node,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6863 ,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6864 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6865 function e:configure_subscription(e,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6866 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6867 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6868 function e:items(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6869 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6870 self.stream:send_iq(t("get",self.service,nil,"items",self.node)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6871 ,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6872 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6873 self.stream:disco_items(self.service,self.node,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6874 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6875 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6876 function e:item(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6877 self.stream:send_iq(t("get",self.service,nil,"items",self.node,nil,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6878 ,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6879 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6880 function e:retract(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6881 self.stream:send_iq(t("set",self.service,nil,"retract",self.node,nil,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6882 ,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6883 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6884 function e:purge(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6885 assert(not a,"Not implemented yet.");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6886 self.stream:send_iq(t("set",self.service,h,"purge",self.node)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6887 ,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6888 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6889 function e:delete(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6890 assert(not a,"Not implemented yet.");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6891 self.stream:send_iq(t("set",self.service,h,"delete",self.node)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6892 ,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6893 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6894 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6895 package.preload['verse.plugins.pep']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6896 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6897 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6898 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6899 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6900 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6901 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6902 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6903 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6904 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6905 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6906 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6907 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6908 local t="http://jabber.org/protocol/pubsub";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6909 local t=t.."#event";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6910 function e.plugins.pep(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6911 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6912 e:add_plugin("pubsub");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6913 e.pep={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6914 e:hook("pubsub/event",function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6915 return e:event("pep/"..t.node,{from=t.from,item=t.item.tags[1]});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6916 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6917 function e:hook_pep(t,i,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6918 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6919 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6920 e:add_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6921 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6922 e:hook("pep/"..t,i,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6923 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6924 function e:unhook_pep(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6925 e:unhook("pep/"..t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6926 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6927 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6928 e:remove_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6929 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6930 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6931 function e:publish_pep(t,a,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6932 return e.pubsub:service(nil):node(a or t.attr.xmlns):publish(o or"current",nil,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6933 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6934 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6935 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6936 package.preload['verse.plugins.adhoc']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6937 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6938 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6939 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6940 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6941 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6942 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6943 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6944 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6945 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6946 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6947 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6948 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6949 local n=require"lib.adhoc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6950 local t="http://jabber.org/protocol/commands";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6951 local s="jabber:x:data";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6952 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6953 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6954 local i={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6955 function o.plugins.adhoc(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6956 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6957 e:add_disco_feature(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6958 function e:query_commands(a,o)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6959 e:disco_items(a,t,function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6960 e:debug("adhoc list returned")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6961 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6962 for o,a in ipairs(a)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6963 t[a.node]=a.name;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6965 e:debug("adhoc calling callback")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6966 return o(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6967 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6968 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6969 function e:execute_command(t,i,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6970 local e=setmetatable({
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6971 stream=e,jid=t,
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6972 command=i,callback=o
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6973 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6974 return e:execute();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6975 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6976 local function h(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6977 if not(e)or e=="user"then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6978 if type(e)=="function"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6979 return e(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6980 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6981 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6982 function e:add_adhoc_command(o,a,h,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6983 i[a]=n.new(o,a,h,s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6984 e:add_disco_item({jid=e.jid,node=a,name=o},t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6985 return i[a];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6986 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6987 local function s(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6988 local t=a.tags[1];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6989 local t=t.attr.node;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6990 local t=i[t];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6991 if not t then return;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6992 if not h(a.attr.from,t.permission)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6993 e:send(o.error_reply(a,"auth","forbidden","You don't have permission to execute this command"):up()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6994 :add_child(t:cmdtag("canceled")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6995 :tag("note",{type="error"}):text("You don't have permission to execute this command")));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6996 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6997 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6998 return n.handle_cmd(t,{send=function(t)return e:send(t)end},a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6999 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7000 e:hook("iq/"..t,function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7001 local a=e.attr.type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7002 local t=e.tags[1].name;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7003 if a=="set"and t=="command"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7004 return s(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7006 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7007 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7008 function a:_process_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7009 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7010 self.status="canceled";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7011 self.callback(self,{});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7012 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7013 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7014 local e=e:get_child("command",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7015 self.status=e.attr.status;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7016 self.sessionid=e.attr.sessionid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7017 self.form=e:get_child("x",s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7018 self.note=e:get_child("note");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7019 self.callback(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7020 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7021 function a:execute()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7022 local e=o.iq({to=self.jid,type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7023 :tag("command",{xmlns=t,node=self.command});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7024 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7025 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7026 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7027 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7028 function a:next(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7029 local t=o.iq({to=self.jid,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7030 :tag("command",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7031 xmlns=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7032 node=self.command,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7033 sessionid=self.sessionid
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7034 });
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7035 if e then t:add_child(e);end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7036 self.stream:send_iq(t,function(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7037 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7038 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7039 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7040 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7041 package.preload['verse.plugins.presence']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7042 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7043 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7044 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7045 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7046 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7047 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7048 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7049 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7050 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7051 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7052 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7053 local a=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7054 function a.plugins.presence(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7055 t.last_presence=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7056 t:hook("presence-out",function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7057 if not e.attr.to then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7058 t.last_presence=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7059 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7060 end,1);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7061 function t:resend_presence()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7062 if self.last_presence then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7063 t:send(self.last_presence);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7064 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7065 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7066 function t:set_status(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7067 local a=a.presence();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7068 if type(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7069 if e.show then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7070 a:tag("show"):text(e.show):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7071 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7072 if e.priority or e.prio then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7073 a:tag("priority"):text(tostring(e.priority or e.prio)):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7074 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7075 if e.status or e.msg then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7076 a:tag("status"):text(e.status or e.msg):up();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7077 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7078 elseif type(e)=="string"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7079 a:tag("status"):text(e):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7080 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7081 t:send(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7082 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7083 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7084 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7085 package.preload['verse.plugins.private']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7086 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7087 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7088 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7089 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7090 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7091 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7092 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7093 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7094 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7095 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7096 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7097 local a=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7098 local t="jabber:iq:private";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7099 function a.plugins.private(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7100 function o:private_set(i,o,e,n)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7101 local t=a.iq({type="set"})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7102 :tag("query",{xmlns=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7103 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7104 if e.name==i and e.attr and e.attr.xmlns==o then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7105 t:add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7106 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7107 t:tag(i,{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7108 :add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7109 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7110 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7111 self:send_iq(t,n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7112 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7113 function o:private_get(o,e,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7114 self:send_iq(a.iq({type="get"})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7115 :tag("query",{xmlns=t})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7116 :tag(o,{xmlns=e}),
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7117 function(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7118 if a.attr.type=="result"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7119 local t=a:get_child("query",t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7120 local e=t:get_child(o,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7121 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7123 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7125 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7126 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7127 package.preload['verse.plugins.roster']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7128 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7129 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7130 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7131 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7132 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7133 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7134 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7135 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7136 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7137 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7138 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7139 local i=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7140 local l=require"util.jid".bare;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7141 local a="jabber:iq:roster";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7142 local o="urn:xmpp:features:rosterver";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7143 local n=table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7144 function i.plugins.roster(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7145 local h=false;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7146 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7147 items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7148 ver="";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7149 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7150 t.roster=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7151 t:hook("stream-features",function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7152 if e:get_child("ver",o)then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7153 h=true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7154 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7155 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7156 local function s(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7157 local e=i.stanza("item",{xmlns=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7158 for a,t in pairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7159 if a~="groups"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7160 e.attr[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7161 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7162 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7163 e:tag("group"):text(t[a]):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7164 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7165 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7166 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7167 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7168 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7169 local function d(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7170 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7171 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7172 e.groups=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7173 for t,a in pairs(a.attr)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7174 if t~="xmlns"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7175 e[t]=a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7176 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7177 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7178 for e in a:childtags("group")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7179 n(t,e:get_text())
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7180 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7181 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7182 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7183 function e:load(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7184 e.ver,e.items=t.ver,t.items;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7186 function e:dump()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7187 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7188 ver=e.ver,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7189 items=e.items,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7190 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7191 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7192 function e:add_contact(n,o,h,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7193 local o={jid=n,name=o,groups=h};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7194 local a=i.iq({type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7195 :tag("query",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7196 :add_child(s(o));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7197 t:send_iq(a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7198 if not e then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7199 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7200 e(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7201 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7202 e(nil,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7203 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7204 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7205 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7206 function e:delete_contact(o,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7207 o=(type(o)=="table"and o.jid)or o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7208 local h={jid=o,subscription="remove"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7209 if not e.items[o]then return false,"item-not-found";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7210 t:send_iq(i.iq({type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7211 :tag("query",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7212 :add_child(s(h)),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7213 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7214 if not n then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7215 if e.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7216 n(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7217 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7218 n(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7219 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7220 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7221 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7222 local function r(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7223 local t=d(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7224 e.items[t.jid]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7225 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7226 local function d(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7227 local a=e.items[t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7228 e.items[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7229 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7230 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7231 function e:fetch(o)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7232 t:send_iq(i.iq({type="get"}):tag("query",{xmlns=a,ver=h and e.ver or nil}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7233 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7234 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7235 local t=t:get_child("query",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7236 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7237 e.items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7238 for t in t:childtags("item")do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7239 r(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7240 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7241 e.ver=t.attr.ver or"";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7242 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7243 o(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7244 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7245 o(nil,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7246 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7247 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7248 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7249 t:hook("iq/"..a,function(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7250 local s,n=o.attr.type,o.attr.from;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7251 if s=="set"and(not n or n==l(t.jid))then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7252 local n=o:get_child("query",a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7253 local a=n and n:get_child("item");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7254 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7255 local i,o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7256 local s=a.attr.jid;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7257 if a.attr.subscription=="remove"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7258 i="removed"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7259 o=d(s);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7260 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7261 i=e.items[s]and"changed"or"added";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7262 r(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7263 o=e.items[s];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7264 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7265 e.ver=n.attr.ver;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7266 if o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7267 t:event("roster/item-"..i,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7268 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7269 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7270 t:send(i.reply(o))
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7271 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7272 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7273 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7274 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7275 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7276 package.preload['verse.plugins.register']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7277 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7278 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7279 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7280 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7281 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7282 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7283 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7284 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7285 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7286 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7287 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7288 local t=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7289 local i="jabber:iq:register";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7290 function t.plugins.register(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7291 local function a(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7292 if o:get_child("register","http://jabber.org/features/iq-register")then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7293 local t=t.iq({to=e.host_,type="set"})
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7294 :tag("query",{xmlns=i})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7295 :tag("username"):text(e.username):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7296 :tag("password"):text(e.password):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7297 if e.register_email then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7298 t:tag("email"):text(e.register_email):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7299 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7300 e:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7301 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7302 e:event("registration-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7303 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7304 local a,t,o=t:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7305 e:debug("Registration failed: %s",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7306 e:event("registration-failure",{type=a,condition=t,text=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7307 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7308 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7309 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7310 e:debug("In-band registration not offered by server");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7311 e:event("registration-failure",{condition="service-unavailable"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7312 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7313 e:unhook("stream-features",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7314 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7315 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7316 e:hook("stream-features",a,310);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7317 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7318 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7319 package.preload['verse.plugins.groupchat']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7320 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7321 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7322 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7323 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7324 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7325 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7326 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7327 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7328 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7329 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7330 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7331 local i=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7332 local e=require"util.events";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7333 local n=require"util.jid";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7334 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7335 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7336 local h="urn:xmpp:delay";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7337 local s="http://jabber.org/protocol/muc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7338 function i.plugins.groupchat(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7339 o:add_plugin("presence")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7340 o.rooms={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7341 o:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7342 local a=n.bare(e.attr.from);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7343 if not a then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7344 local t=o.rooms[a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7345 if not t and e.attr.to and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7346 t=o.rooms[e.attr.to.." "..a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7347 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7348 if t and t.opts.source and e.attr.to~=t.opts.source then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7349 if t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7350 local o=select(3,n.split(e.attr.from));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7351 local n=e:get_child_text("body");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7352 local i=e:get_child("delay",h);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7353 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7354 room_jid=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7355 room=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7356 sender=t.occupants[o];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7357 nick=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7358 body=n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7359 stanza=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7360 delay=(i and i.attr.stamp);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7361 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7362 local t=t:event(e.name,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7363 return t or(e.name=="message")or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7365 end,500);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7366 function o:join_room(n,h,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7367 if not h then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7368 return false,"no nickname supplied"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7370 t=t or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7371 local e=setmetatable(i.eventable{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7372 stream=o,jid=n,nick=h,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7373 subject=nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7374 occupants={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7375 opts=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7376 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7377 if t.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7378 self.rooms[t.source.." "..n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7379 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7380 self.rooms[n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7381 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7382 local a=e.occupants;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7383 e:hook("presence",function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7384 local t=o.nick or h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7385 if not a[t]and o.stanza.attr.type~="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7386 a[t]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7387 nick=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7388 jid=o.stanza.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7389 presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7390 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7391 local o=o.stanza:get_child("x",s.."#user");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7392 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7393 local e=o:get_child("item");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7394 if e and e.attr then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7395 a[t].real_jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7396 a[t].affiliation=e.attr.affiliation;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7397 a[t].role=e.attr.role;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7398 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7400 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7401 e.stream:event("groupchat/joined",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7402 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7403 e:event("occupant-joined",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7404 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7405 elseif a[t]and o.stanza.attr.type=="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7406 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7407 e.stream:event("groupchat/left",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7408 if e.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7409 self.rooms[e.opts.source.." "..n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7410 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7411 self.rooms[n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7412 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7413 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7414 a[t].presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7415 e:event("occupant-left",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7416 a[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7417 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7418 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7419 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7420 e:hook("message",function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7421 local t=a.stanza:get_child_text("subject");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7422 if not t then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7423 t=#t>0 and t or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7424 if t~=e.subject then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7425 local o=e.subject;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7426 e.subject=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7427 return e:event("subject-changed",{from=o,to=t,by=a.sender,event=a});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7428 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7429 end,2e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7430 local t=i.presence():tag("x",{xmlns=s}):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7431 self:event("pre-groupchat/joining",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7432 e:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7433 self:event("groupchat/joining",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7434 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7435 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7436 o:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7437 if not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7438 for a,t in pairs(o.rooms)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7439 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7440 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7441 e.attr.to=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7443 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7444 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7445 function a:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7446 if e.name=="message"and not e.attr.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7447 e.attr.type="groupchat";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7448 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7449 if e.name=="presence"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7450 e.attr.to=self.jid.."/"..self.nick;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7452 if e.attr.type=="groupchat"or not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7453 e.attr.to=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7454 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7455 if self.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7456 e.attr.from=self.opts.source
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7457 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7458 self.stream:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7459 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7460 function a:send_message(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7461 self:send(i.message():tag("body"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7462 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7463 function a:set_subject(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7464 self:send(i.message():tag("subject"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7465 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7466 function a:leave(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7467 self.stream:event("groupchat/leaving",self);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7468 local e=i.presence({type="unavailable"});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7469 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7470 e:tag("status"):text(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7471 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7472 self:send(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7473 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7474 function a:admin_set(a,t,o,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7475 self:send(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7476 :query(s.."#admin")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7477 :tag("item",{nick=a,[t]=o})
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7478 :tag("reason"):text(e or""));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7479 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7480 function a:set_role(t,e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7481 self:admin_set(t,"role",e,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7482 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7483 function a:set_affiliation(a,e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7484 self:admin_set(a,"affiliation",e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7485 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7486 function a:kick(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7487 self:set_role(e,"none",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7488 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7489 function a:ban(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7490 self:set_affiliation(t,"outcast",e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7491 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7492 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7493 package.preload['verse.plugins.vcard']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7494 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7495 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7496 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7497 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7498 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7499 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7500 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7501 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7502 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7503 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7504 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7505 local i=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7506 local o=require"util.vcard";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7507 local e="vcard-temp";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7508 function i.plugins.vcard(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7509 function a:get_vcard(n,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7510 a:send_iq(i.iq({to=n,type="get"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7511 :tag("vCard",{xmlns=e}),t and function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7512 local e=a:get_child("vCard",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7513 if a.attr.type=="result"and e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7514 e=o.from_xep54(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7515 t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7516 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7517 t(false)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7518 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7519 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7520 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7521 function a:set_vcard(e,n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7522 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7523 if type(e)=="table"and e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7524 t=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7525 elseif type(e)=="string"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7526 t=o.to_xep54(o.from_text(e)[1]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7527 elseif type(e)=="table"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7528 t=o.to_xep54(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7529 error("Converting a table to vCard not implemented")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7530 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7531 if not t then return false end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7532 a:debug("setting vcard to %s",tostring(t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7533 a:send_iq(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7534 :add_child(t),n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7535 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7537 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7538 package.preload['verse.plugins.vcard_update']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7539 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7540 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7541 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7542 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7543 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7544 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7545 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7546 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7547 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7548 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7549 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7550 local n=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7551 local i="vcard-temp:x:update";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7552 local s=require("util.hashes").sha1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7553 local e,t=pcall(function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7554 local e=require("util.encodings").base64.decode;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7555 assert(e("SGVsbG8=")=="Hello")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7556 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7557 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7558 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7559 e,t=pcall(function()return require("mime").unb64;end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7560 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7561 error("Could not find a base64 decoder")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7562 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7563 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7564 local h=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7565 function n.plugins.vcard_update(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7566 e:add_plugin("vcard");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7567 e:add_plugin("presence");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7568 local t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7569 local function r(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7570 local o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7571 for e=1,#a do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7572 if a[e].name=="PHOTO"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7573 o=a[e][1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7574 break
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7576 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7577 if o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7578 local a=s(h(o),true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7579 t=n.stanza("x",{xmlns=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7580 :tag("photo"):text(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7581 e:resend_presence()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7582 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7583 t=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7584 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7585 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7586 local a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7587 e:hook("ready",function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7588 if a then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7589 a=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7590 e:get_vcard(nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7591 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7592 r(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7593 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7594 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7595 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7596 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7597 end,3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7598 e:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7599 if t and not e:get_child("x",i)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7600 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7601 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7602 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7603 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7604 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7605 package.preload['verse.plugins.carbons']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7606 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7607 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7608 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7609 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7610 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7611 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7612 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7613 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7614 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7615 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7616 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7617 local a=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7618 local o="urn:xmpp:carbons:2";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7619 local n="urn:xmpp:forward:0";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7620 local s=os.time;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7621 local r=require"util.datetime".parse;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7622 local h=require"util.jid".bare;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7623 function a.plugins.carbons(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7624 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7625 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7626 e.carbons=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7627 function t:enable(i)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7628 e:send_iq(a.iq{type="set"}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7629 :tag("enable",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7630 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7631 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7632 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7633 t.enabled=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7634 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7635 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7636 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7637 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7638 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7639 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7640 function t:disable(i)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7641 e:send_iq(a.iq{type="set"}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7642 :tag("disable",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7643 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7644 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7645 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7646 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7647 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7648 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7649 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7650 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7651 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7652 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7653 local i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7654 e:hook("bind-success",function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7655 i=h(e.jid);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7656 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7657 e:hook("message",function(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7658 local t=a:get_child(nil,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7659 if a.attr.from==i and t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7660 local o=t.name;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7661 local t=t:get_child("forwarded",n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7662 local a=t and t:get_child("message","jabber:client");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7663 local t=t:get_child("delay","urn:xmpp:delay");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7664 local t=t and t.attr.stamp;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7665 t=t and r(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7666 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7667 return e:event("carbon",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7668 dir=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7669 stanza=a,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7670 timestamp=t or s(),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7671 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7672 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7673 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7674 end,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7675 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7676 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7677 package.preload['verse.plugins.archive']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7678 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7679 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7680 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7681 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7682 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7683 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7684 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7685 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7686 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7687 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7688 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7689 local a=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7690 local t=require"util.stanza";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7691 local e="urn:xmpp:mam:2"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7692 local n="urn:xmpp:forward:0";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7693 local c="urn:xmpp:delay";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7694 local d=require"util.uuid".generate;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7695 local m=require"util.datetime".parse;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7696 local s=require"util.datetime".datetime;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7697 local o=require"util.dataforms".new;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7698 local h=require"util.rsm";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7699 local l={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7700 local u=o{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7701 {name="FORM_TYPE";type="hidden";value=e;};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7702 {name="with";type="jid-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7703 {name="start";type="text-single"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7704 {name="end";type="text-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7705 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7706 function a.plugins.archive(i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7707 function i:query_archive(o,a,r)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7708 local d=d();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7709 local o=t.iq{type="set",to=o}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7710 :tag("query",{xmlns=e,queryid=d});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7711 local i,t=tonumber(a["start"]),tonumber(a["end"]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7712 a["start"]=i and s(i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7713 a["end"]=t and s(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7714 o:add_child(u:form(a,"submit"));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7715 o:add_child(h.generate(a));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7716 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7717 local function i(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7718 local a=o:get_child("result",e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7719 if a and a.attr.queryid==d then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7720 local e=a:get_child("forwarded",n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7721 e=e or o:get_child("forwarded",n);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7722 local o=a.attr.id;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7723 local a=e:get_child("delay",c);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7724 local a=a and m(a.attr.stamp)or nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7725 local e=e:get_child("message","jabber:client")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7726 t[#t+1]={id=o,stamp=a,message=e};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7727 return true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7728 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7729 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7730 self:hook("message",i,1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7731 self:send_iq(o,function(a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7732 self:unhook("message",i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7733 if a.attr.type=="error"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7734 self:warn(table.concat({a:get_error()}," "))
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7735 r(false,a:get_error())
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7736 return true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7737 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7738 local e=a:get_child("fin",e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7739 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7740 local e=h.get(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7741 for a,e in pairs(e or l)do t[a]=e;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7742 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7743 r(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7744 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7745 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7746 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7747 local n={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7748 always=true,[true]="always",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7749 never=false,[false]="never",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7750 roster="roster",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7751 }
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7752 local function s(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7753 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7754 local a=t.attr.default;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7755 if a then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7756 e[false]=n[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7757 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7758 local a=t:get_child("always");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7759 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7760 for t in a:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7761 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7762 e[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7763 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7764 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7765 local t=t:get_child("never");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7766 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7767 for t in t:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7768 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7769 e[t]=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7770 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7771 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7772 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7773 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7774 local function h(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7775 local a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7776 a,o[false]=o[false],nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7777 if a~=nil then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7778 a=n[a];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7779 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7780 local i=t.stanza("prefs",{xmlns=e,default=a})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7781 local a=t.stanza("always");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7782 local e=t.stanza("never");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7783 for o,t in pairs(o)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7784 (t and a or e):tag("jid"):text(o):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7785 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7786 return i:add_child(a):add_child(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7787 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7788 function i:archive_prefs_get(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7789 self:send_iq(t.iq{type="get"}:tag("prefs",{xmlns=e}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7790 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7791 if e and e.attr.type=="result"and e.tags[1]then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7792 local t=s(e.tags[1]);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7793 a(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7794 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7795 a(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7796 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7797 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7798 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7799 function i:archive_prefs_set(e,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7800 self:send_iq(t.iq{type="set"}:add_child(h(e)),a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7802 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7803 end)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7804 package.preload['util.http']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7805 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7806 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7807 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7808 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7809 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7810 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7811 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7812 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7813 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7814 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7815 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7816 local t,n=string.format,string.char;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7817 local o,s,h=pairs,ipairs,tonumber;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7818 local i,d=table.insert,table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7819 local function r(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7820 return e and(e:gsub("[^a-zA-Z0-9.~_-]",function(e)return t("%%%02x",e:byte());end));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7821 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7822 local function a(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7823 return e and(e:gsub("%%(%x%x)",function(e)return n(h(e,16));end));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7824 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7825 local function e(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7826 return e and(e:gsub("%W",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7827 if e~=" "then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7828 return t("%%%02x",e:byte());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7829 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7830 return"+";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7831 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7832 end));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7833 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7834 local function n(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7835 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7836 if t[1]then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7837 for o,t in s(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7838 i(a,e(t.name).."="..e(t.value));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7839 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7840 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7841 for o,t in o(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7842 i(a,e(o).."="..e(t));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7843 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7844 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7845 return d(a,"&");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7846 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7847 local function s(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7848 if not e:match("=")then return a(e);end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7849 local o={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7850 for e,t in e:gmatch("([^=&]*)=([^&]*)")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7851 e,t=e:gsub("%+","%%20"),t:gsub("%+","%%20");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7852 e,t=a(e),a(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7853 i(o,{name=e,value=t});
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7854 o[e]=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7855 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7856 return o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7857 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7858 local function o(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7859 e=","..e:gsub("[ \t]",""):lower()..",";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7860 return e:find(","..t:lower()..",",1,true)~=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7861 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7862 return{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7863 urlencode=r,urldecode=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7864 formencode=n,formdecode=s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7865 contains_token=o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7866 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7867 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7868 package.preload['net.http.parser']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7869 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7870 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7871 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7872 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7873 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7874 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7875 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7876 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7877 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7878 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7879 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7880 local m=tonumber;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7881 local a=assert;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7882 local v=require"socket.url".parse;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7883 local t=require"util.http".urldecode;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7884 local function b(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7885 e=t((e:gsub("//+","/")));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7886 if e:sub(1,1)~="/"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7887 e="/"..e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7888 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7889 local t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7890 for e in e:gmatch("([^/]+)/")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7891 if e==".."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7892 t=t-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7893 elseif e~="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7894 t=t+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7895 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7896 if t<0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7897 return nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7898 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7899 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7900 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7901 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7902 local y={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7903 function y.new(c,h,e,y)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7904 local d=true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7905 if not e or e=="server"then d=false;else a(e=="client","Invalid parser type");end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7906 local e="";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7907 local p,o,r;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7908 local s=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7909 local t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7910 local a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7911 local u;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7912 local n;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7913 return{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7914 feed=function(l,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7915 if n then return nil,"parse has failed";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7916 if not i then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7917 if s and d and not a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7918 t.body=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7919 c(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7920 elseif e~=""then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7921 n=true;return h();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7922 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7923 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7924 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7925 e=e..i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7926 while#e>0 do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7927 if s==nil then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7928 local f=e:find("\r\n\r\n",nil,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7929 if not f then return;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7930 local w,r,l,i,g;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7931 local c;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7932 local o={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7933 for t in e:sub(1,f+1):gmatch("([^\r\n]+)\r\n")do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7934 if c then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7935 local e,t=t:match("^([^%s:]+): *(.*)$");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7936 if not e then n=true;return h("invalid-header-line");end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7937 e=e:lower();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7938 o[e]=o[e]and o[e]..","..t or t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7939 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7940 c=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7941 if d then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7942 l,i,g=t:match("^HTTP/(1%.[01]) (%d%d%d) (.*)$");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7943 i=m(i);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7944 if not i then n=true;return h("invalid-status-line");end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7945 u=not
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7946 ((y and y().method=="HEAD")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7947 or(i==204 or i==304 or i==301)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7948 or(i>=100 and i<200));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7949 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7950 w,r,l=t:match("^(%w+) (%S+) HTTP/(1%.[01])$");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7951 if not w then n=true;return h("invalid-status-line");end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7952 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7953 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7954 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7955 if not c then n=true;return h("invalid-status-line");end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7956 p=u and o["transfer-encoding"]=="chunked";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7957 a=m(o["content-length"]);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7958 if d then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7959 if not u then a=0;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7960 t={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7961 code=i;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7962 httpversion=l;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7963 headers=o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7964 body=u and""or nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7965 responseversion=l;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7966 responseheaders=o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7967 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7968 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7969 local e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7970 if r:byte()==47 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7971 local a,t=r:match("([^?]*).?(.*)");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7972 if t==""then t=nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7973 e={path=a,query=t};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7974 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7975 e=v(r);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7976 if not(e and e.path)then n=true;return h("invalid-url");end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7977 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7978 r=b(e.path);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7979 o.host=e.host or o.host;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7980 a=a or 0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7981 t={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7982 method=w;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7983 url=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7984 path=r;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7985 httpversion=l;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7986 headers=o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7987 body=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7988 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7989 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7990 e=e:sub(f+4);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7991 s=true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7992 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7993 if s then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7994 if d then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7995 if p then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7996 if not e:find("\r\n",nil,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7997 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7998 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7999 if not o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8000 o,r=e:match("^(%x+)[^\r\n]*\r\n()");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8001 o=o and m(o,16);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8002 if not o then n=true;return h("invalid-chunk-size");end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8003 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8004 if o==0 and e:find("\r\n\r\n",r-2,true)then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8005 s,o=nil,nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8006 e=e:gsub("^.-\r\n\r\n","");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8007 c(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8008 elseif#e-r-2>=o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8009 t.body=t.body..e:sub(r,r+(o-1));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8010 e=e:sub(r+o+2);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8011 o,r=nil,nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8012 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8013 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8014 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8015 elseif a and#e>=a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8016 if t.code==101 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8017 t.body,e=e,"";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8018 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8019 t.body,e=e:sub(1,a),e:sub(a+1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8020 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8021 s=nil;c(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8022 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8023 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8024 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8025 elseif#e>=a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8026 t.body,e=e:sub(1,a),e:sub(a+1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8027 s=nil;c(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8028 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8029 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8030 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8031 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8032 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8033 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8034 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8035 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8036 return y;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8037 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8038 package.preload['net.http']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8039 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8040 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8041 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8042 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8043 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8044 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8045 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8046 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8047 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8048 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8049 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8050 local g=require"socket"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8051 local b=require"util.encodings".base64.encode;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8052 local l=require"socket.url"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8053 local u=require"net.http.parser".new;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8054 local s=require"util.http";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8055 local k=pcall(require,"ssl");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8056 local q=require"net.server"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8057 local d,o=table.insert,table.concat;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8058 local m=pairs;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8059 local y,h,w,f,r=
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8060 tonumber,tostring,xpcall,select,debug.traceback;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8061 local p,v=assert,error
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8062 local c=require"util.logger".init("http");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8063 a"http"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8064 local i={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8065 local n={default_port=80,default_mode="*a"};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8066 function n.onconnect(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8067 local e=i[t];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8068 local a={e.method or"GET"," ",e.path," HTTP/1.1\r\n"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8069 if e.query then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8070 d(a,4,"?"..e.query);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8071 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8072 t:write(o(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8073 local a={[2]=": ",[4]="\r\n"};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8074 for e,i in m(e.headers)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8075 a[1],a[3]=e,i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8076 t:write(o(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8077 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8078 t:write("\r\n");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8079 if e.body then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8080 t:write(e.body);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8081 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8082 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8083 function n.onincoming(a,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8084 local e=i[a];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8085 if not e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8086 c("warn","Received response from connection %s with no request attached!",h(a));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8087 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8088 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8089 if t and e.reader then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8090 e:reader(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8091 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8092 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8093 function n.ondisconnect(t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8094 local e=i[t];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8095 if e and e.conn then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8096 e:reader(nil,a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8097 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8098 i[t]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8099 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8100 function n.ondetach(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8101 i[e]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8102 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8103 local function x(e,a,i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8104 if not e.parser then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8105 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8106 if e.callback then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8107 e.callback(t or"connection-closed",0,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8108 e.callback=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8109 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8110 destroy_request(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8111 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8112 if not a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8113 o(i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8114 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8115 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8116 local function a(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8117 if e.callback then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8118 e.callback(t.body,t.code,t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8119 e.callback=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8120 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8121 destroy_request(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8123 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8124 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8125 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8126 e.parser=u(a,o,"client",t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8127 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8128 e.parser:feed(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8129 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8130 local function j(e)c("error","Traceback[http]: %s",r(h(e),2));end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8131 function request(e,t,r)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8132 local e=l.parse(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8133 if not(e and e.host)then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8134 r(nil,0,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8135 return nil,"invalid-url";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8137 if not e.path then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8138 e.path="/";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8139 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8140 local l,o,s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8141 local u,a=e.host,e.port;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8142 local d=u;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8143 if(a=="80"and e.scheme=="http")
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8144 or(a=="443"and e.scheme=="https")then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8145 a=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8146 elseif a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8147 d=d..":"..a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8148 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8149 o={
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8150 ["Host"]=d;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8151 ["User-Agent"]="Prosody XMPP Server";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8152 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8153 if e.userinfo then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8154 o["Authorization"]="Basic "..b(e.userinfo);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8155 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8156 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8157 e.onlystatus=t.onlystatus;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8158 s=t.body;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8159 if s then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8160 l="POST";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8161 o["Content-Length"]=h(#s);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8162 o["Content-Type"]="application/x-www-form-urlencoded";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8163 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8164 if t.method then l=t.method;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8165 if t.headers then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8166 for e,t in m(t.headers)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8167 o[e]=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8168 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8169 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8170 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8171 e.method,e.headers,e.body=l,o,s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8172 local o=e.scheme=="https";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8173 if o and not k then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8174 v("SSL not available, unable to contact https URL");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8175 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8176 local h=a and y(a)or(o and 443 or 80);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8177 local a=g.tcp();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8178 a:settimeout(10);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8179 local d,s=a:connect(u,h);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8180 if not d and s~="timeout"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8181 r(nil,0,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8182 return nil,s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8183 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8184 local s=false;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8185 if o then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8186 s=t and t.sslctx or{mode="client",protocol="sslv23",options={"no_sslv2","no_sslv3"}};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8187 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8188 e.handler,e.conn=p(q.wrapclient(a,u,h,n,"*a",s));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8189 e.write=function(...)return e.handler:write(...);end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8190 e.callback=function(i,t,o,a)c("debug","Calling callback, status %s",t or"---");return f(2,w(function()return r(i,t,o,a)end,j));end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8191 e.reader=x;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8192 e.state="status";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8193 i[e.handler]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8194 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8195 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8196 function destroy_request(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8197 if e.conn then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8198 e.conn=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8199 e.handler:close()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8200 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8201 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8202 local e,t=s.urlencode,s.urldecode;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8203 local o,a=s.formencode,s.formdecode;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8204 _M.urlencode,_M.urldecode=e,t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8205 _M.formencode,_M.formdecode=o,a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8206 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8207 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8208 package.preload['verse.bosh']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8209 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8210 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8211 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8212 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8213 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8214 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8215 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8216 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8217 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8218 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8219 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8220 local h=require"util.xmppstream".new;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8221 local i=require"util.stanza";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8222 require"net.httpclient_listener";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8223 local o=require"net.http";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8224 local e=setmetatable({},{__index=verse.stream_mt});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8225 e.__index=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8226 local n="http://etherx.jabber.org/streams";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8227 local s="http://jabber.org/protocol/httpbind";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8228 local a=5;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8229 function verse.new_bosh(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8230 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8231 bosh_conn_pool={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8232 bosh_waiting_requests={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8233 bosh_rid=math.random(1,999999);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8234 bosh_outgoing_buffer={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8235 bosh_url=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8236 conn={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8237 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8238 function t:reopen()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8239 self.bosh_need_restart=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8240 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8241 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8242 local t=verse.new(a,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8243 return setmetatable(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8245 function e:connect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8246 self:_send_session_request();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8247 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8248 function e:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8249 self:debug("Putting into BOSH send buffer: %s",tostring(e));
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8250 self.bosh_outgoing_buffer[#self.bosh_outgoing_buffer+1]=i.clone(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8251 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8253 function e:flush()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8254 if self.connected
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8255 and#self.bosh_waiting_requests<self.bosh_max_requests
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8256 and(#self.bosh_waiting_requests==0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8257 or#self.bosh_outgoing_buffer>0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8258 or self.bosh_need_restart)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8259 self:debug("Flushing...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8260 local e=self:_make_body();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8261 local t=self.bosh_outgoing_buffer;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8262 for a,o in ipairs(t)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8263 e:add_child(o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8264 t[a]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8265 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8266 self:_make_request(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8267 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8268 self:debug("Decided not to flush.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8269 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8270 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8271 function e:_make_request(i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8272 local e,t=o.request(self.bosh_url,{body=tostring(i)},function(o,e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8273 if e~=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8274 self.inactive_since=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8275 return self:_handle_response(o,e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8276 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8277 local e=os.time();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8278 if not self.inactive_since then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8279 self.inactive_since=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8280 elseif e-self.inactive_since>self.bosh_max_inactivity then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8281 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8282 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8283 self:debug("%d seconds left to reconnect, retrying in %d seconds...",
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8284 self.bosh_max_inactivity-(e-self.inactive_since),a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8285 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8286 timer.add_task(a,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8287 self:debug("Retrying request...");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8288 for e,a in ipairs(self.bosh_waiting_requests)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8289 if a==t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8290 table.remove(self.bosh_waiting_requests,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8291 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8292 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8293 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8294 self:_make_request(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8295 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8296 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8297 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8298 table.insert(self.bosh_waiting_requests,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8299 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8300 self:warn("Request failed instantly: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8301 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8302 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8303 function e:_disconnected()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8304 self.connected=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8305 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8306 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8307 function e:_send_session_request()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8308 local e=self:_make_body();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8309 e.attr.hold="1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8310 e.attr.wait="60";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8311 e.attr["xml:lang"]="en";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8312 e.attr.ver="1.6";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8313 e.attr.from=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8314 e.attr.to=self.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8315 e.attr.secure='true';
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8316 o.request(self.bosh_url,{body=tostring(e)},function(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8317 if t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8318 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8319 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8320 local e=self:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8321 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8322 self:warn("Invalid session creation response");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8323 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8324 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8325 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8326 self.bosh_sid=e.attr.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8327 self.bosh_wait=tonumber(e.attr.wait);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8328 self.bosh_hold=tonumber(e.attr.hold);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8329 self.bosh_max_inactivity=tonumber(e.attr.inactivity);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8330 self.bosh_max_requests=tonumber(e.attr.requests)or self.bosh_hold;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8331 self.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8332 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8333 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8334 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8335 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8336 function e:_handle_response(o,t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8337 if self.bosh_waiting_requests[1]~=e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8338 self:warn("Server replied to request that wasn't the oldest");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8339 for a,t in ipairs(self.bosh_waiting_requests)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8340 if t==e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8341 self.bosh_waiting_requests[a]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8342 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8343 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8344 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8345 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8346 table.remove(self.bosh_waiting_requests,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8347 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8348 local e=self:_parse_response(o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8349 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8350 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8351 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8352 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8353 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8354 function e:_handle_response_payload(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8355 local e=t.tags;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8356 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8357 local e=e[t];
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8358 if e.attr.xmlns==n then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8359 self:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8360 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8361 self:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8362 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8363 self:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8365 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8366 if t.attr.type=="terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8367 self:_disconnected({reason=t.attr.condition});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8368 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8370 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8371 stream_ns="http://jabber.org/protocol/httpbind",stream_tag="body",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8372 default_ns="jabber:client",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8373 streamopened=function(e,t)e.notopen=nil;e.payload=verse.stanza("body",t);return true;end;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8374 handlestanza=function(e,t)e.payload:add_child(t);end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8375 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8376 function e:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8377 self:debug("Parsing response: %s",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8378 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8379 self:debug("%s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8380 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8381 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8382 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8383 local t={notopen=true,stream=self};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8384 local a=h(t,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8385 a:feed(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8386 return t.payload;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8387 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8388 function e:_make_body()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8389 self.bosh_rid=self.bosh_rid+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8390 local e=verse.stanza("body",{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8391 xmlns=s;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8392 content="text/xml; charset=utf-8";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8393 sid=self.bosh_sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8394 rid=self.bosh_rid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8395 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8396 if self.bosh_need_restart then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8397 self.bosh_need_restart=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8398 e.attr.restart='true';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8400 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8401 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8402 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8403 package.preload['verse.client']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8404 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8405 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8406 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8407 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8408 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8409 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8410 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8411 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8412 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8413 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8414 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8415 local t=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8416 local o=t.stream_mt;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8417 local d=require"util.jid".split;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8418 local h=require"net.adns";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8419 local e=require"lxp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8420 local a=require"util.stanza";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8421 t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8422 a.message,a.presence,a.iq,a.stanza,a.reply,a.error_reply;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8423 local r=require"util.xmppstream".new;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8424 local n="http://etherx.jabber.org/streams";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8425 local function s(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8426 return t.priority<e.priority or(t.priority==e.priority and t.weight>e.weight);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8427 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8428 local i={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8429 stream_ns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8430 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8431 default_ns="jabber:client"};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8432 function i.streamopened(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8433 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8434 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8435 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8436 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8437 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8438 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8439 function i.streamclosed(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8440 e.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8441 if not e.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8442 e:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8443 e.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8444 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8445 e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8446 return e:close("stream closed")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8447 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8448 function i.handlestanza(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8449 if e.attr.xmlns==n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8450 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8451 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8452 return t:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8454 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8455 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8456 function i.error(a,t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8457 if a:event(t,e)==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8458 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8459 local t=e:get_child(nil,"urn:ietf:params:xml:ns:xmpp-streams");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8460 local e=e:get_child_text("text","urn:ietf:params:xml:ns:xmpp-streams");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8461 error(t.name..(e and": "..e or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8462 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8463 error(e and e.name or t or"unknown-error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8464 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8465 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8466 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8467 function o:reset()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8468 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8469 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8470 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8471 self.stream=r(self,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8473 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8474 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8475 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8476 function o:connect_client(e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8477 self.jid,self.password=e,a;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8478 self.username,self.host,self.resource=d(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8479 self:add_plugin("tls");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8480 self:add_plugin("sasl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8481 self:add_plugin("bind");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8482 self:add_plugin("session");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8483 function self.data(t,e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8484 local t,a=self.stream:feed(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8485 if t then return;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8486 self:debug("Received invalid XML (%s) %d bytes: %s",tostring(a),#e,e:sub(1,300):gsub("[\r\n]+"," "));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8487 self:close("xml-not-well-formed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8488 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8489 self:hook("connected",function()self:reopen();end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8490 self:hook("incoming-raw",function(e)return self.data(self.conn,e);end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8491 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8492 self.tracked_iqs={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8493 self:hook("stanza",function(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8494 local e,a=t.attr.id,t.attr.type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8495 if e and t.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[e]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8496 self.tracked_iqs[e](t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8497 self.tracked_iqs[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8498 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8499 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8500 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8501 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8502 local a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8503 if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8504 if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8505 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8506 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8507 a=self:event("iq/"..o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8508 if not a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8509 a=self:event("iq",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8510 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8511 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8512 if a==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8513 self:send(t.error_reply(e,"cancel","service-unavailable"));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8514 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8515 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8516 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8517 a=self:event(e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8518 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8519 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8520 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8521 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8522 self:hook("outgoing",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8523 if e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8524 self:event("stanza-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8525 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8526 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8527 self:hook("stanza-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8528 if not e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8529 self:event(e.name.."-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8530 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8531 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8532 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8533 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8534 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8535 self:hook("session-success",e,-1)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8536 self:hook("bind-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8537 local t=self.close;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8538 function self:close(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8539 self.close=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8540 if not self.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8541 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8542 self.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8543 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8544 return self:close(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8545 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8546 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8547 local function a()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8548 self:connect(self.connect_host or self.host,self.connect_port or 5222);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8549 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8550 if not(self.connect_host or self.connect_port)then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8551 h.lookup(function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8552 if t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8553 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8554 self.srv_hosts=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8555 for a,t in ipairs(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8556 table.insert(e,t.srv);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8557 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8558 table.sort(e,s);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8559 local t=e[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8560 self.srv_choice=1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8561 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8562 self.connect_host,self.connect_port=t.target,t.port;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8563 self:debug("Best record found, will connect to %s:%d",self.connect_host or self.host,self.connect_port or 5222);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8564 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8565 self:hook("disconnected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8566 if self.srv_hosts and self.srv_choice<#self.srv_hosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8567 self.srv_choice=self.srv_choice+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8568 local e=e[self.srv_choice];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8569 self.connect_host,self.connect_port=e.target,e.port;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8570 a();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8571 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8572 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8573 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8574 self:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8575 self.srv_hosts=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8576 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8577 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8578 a();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8579 end,"_xmpp-client._tcp."..(self.host)..".","SRV");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8580 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8581 a();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8582 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8583 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8584 function o:reopen()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8585 self:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8586 self:send(a.stanza("stream:stream",{to=self.host,["xmlns:stream"]='http://etherx.jabber.org/streams',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8587 xmlns="jabber:client",version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8588 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8589 function o:send_iq(t,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8590 local e=self:new_id();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8591 self.tracked_iqs[e]=a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8592 t.attr.id=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8593 self:send(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8594 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8595 function o:new_id()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8596 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8597 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8598 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8599 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8600 package.preload['verse.component']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8601 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8602 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8603 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8604 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8605 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8606 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8607 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8608 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8609 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8610 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8611 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8612 local t=require"verse";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8613 local a=t.stream_mt;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8614 local h=require"util.jid".split;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8615 local e=require"lxp";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8616 local o=require"util.stanza";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8617 local d=require"util.hashes".sha1;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8618 t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply=
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8619 o.message,o.presence,o.iq,o.stanza,o.reply,o.error_reply;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8620 local r=require"util.xmppstream".new;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8621 local s="http://etherx.jabber.org/streams";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8622 local i="jabber:component:accept";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8623 local n={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8624 stream_ns=s,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8625 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8626 default_ns=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8627 function n.streamopened(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8628 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8629 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8630 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8631 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8632 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8633 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8634 function n.streamclosed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8635 return e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8636 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8637 function n.handlestanza(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8638 if e.attr.xmlns==s then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8639 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8640 elseif e.attr.xmlns or e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8641 return t:event("stream/"..(e.attr.xmlns or i),e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8642 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8643 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8644 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8645 function a:reset()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8646 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8647 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8648 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8649 self.stream=r(self,n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8650 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8651 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8652 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8653 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8654 function a:connect_component(e,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8655 self.jid,self.password=e,n;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8656 self.username,self.host,self.resource=h(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8657 function self.data(t,e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8658 local t,o=self.stream:feed(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8659 if t then return;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8660 a:debug("Received invalid XML (%s) %d bytes: %s",tostring(o),#e,e:sub(1,300):gsub("[\r\n]+"," "));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8661 a:close("xml-not-well-formed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8662 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8663 self:hook("incoming-raw",function(e)return self.data(self.conn,e);end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8664 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8665 self.tracked_iqs={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8666 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8667 local t,a=e.attr.id,e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8668 if t and e.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8669 self.tracked_iqs[t](e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8670 self.tracked_iqs[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8671 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8672 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8673 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8674 self:hook("stanza",function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8675 local a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8676 if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8677 if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8678 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8679 if o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8680 a=self:event("iq/"..o,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8681 if not a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8682 a=self:event("iq",e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8683 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8684 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8685 if a==nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8686 self:send(t.error_reply(e,"cancel","service-unavailable"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8687 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8688 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8689 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8690 a=self:event(e.name,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8691 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8692 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8693 return a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8694 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8695 self:hook("opened",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8696 print(self.jid,self.stream_id,e.id);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8697 local e=d(self.stream_id..n,true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8698 self:send(o.stanza("handshake",{xmlns=i}):text(e));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8699 self:hook("stream/"..i,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8700 if e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8701 self:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8702 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8703 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8704 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8705 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8706 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8707 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8708 self:hook("authentication-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8709 self:connect(self.connect_host or self.host,self.connect_port or 5347);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8710 self:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8711 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8712 function a:reopen()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8713 self:reset();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8714 self:send(o.stanza("stream:stream",{to=self.jid,["xmlns:stream"]='http://etherx.jabber.org/streams',
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8715 xmlns=i,version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8716 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8717 function a:close(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8718 if not self.notopen then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8719 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8720 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8721 local e=self.conn.disconnect();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8722 self.conn:close();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8723 e(conn,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8724 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8725 function a:send_iq(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8726 local e=self:new_id();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8727 self.tracked_iqs[e]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8728 t.attr.id=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8729 self:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8730 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8731 function a:new_id()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8732 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8733 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8734 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8735 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8736 pcall(require,"luarocks.require");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8737 local h=require"socket";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8738 pcall(require,"ssl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8739 local a=require"net.server";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8740 local s=require"util.events";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8741 local o=require"util.logger";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8742 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8743 e.server=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8744 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8745 t.__index=t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8746 e.stream_mt=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8747 e.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8748 function e.init(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8749 for e=1,select("#",...)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8750 local t,a=pcall(require,"verse."..select(e,...));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8751 if not t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8752 error("Verse connection module not found: verse."..select(e,...)..a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8753 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8754 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8755 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8756 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8757 local i=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8758 function e.new(o,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8759 local t=setmetatable(a or{},t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8760 i=i+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8761 t.id=tostring(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8762 t.logger=o or e.new_logger("stream"..t.id);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8763 t.events=s.new();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8764 t.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8765 t.verse=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8766 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8767 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8768 e.add_task=require"util.timer".add_task;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8769 e.logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8770 e.new_logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8771 e.log=e.logger("verse");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8772 local function n(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8773 local e,a,o=0,{...},select('#',...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8774 return(t:gsub("%%(.)",function(t)if e<=o then e=e+1;return tostring(a[e]);end end));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8775 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8776 function e.set_log_handler(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8777 t=t or{"debug","info","warn","error"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8778 o.reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8779 if io.type(e)=="file"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8780 local o=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8781 function e(t,a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8782 o:write(t,"\t",a,"\t",e,"\n");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8783 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8784 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8785 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8786 local function i(o,a,t,...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8787 return e(o,a,n(t,...));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8788 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8789 for t,e in ipairs(t)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8790 o.add_level_sink(e,i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8791 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8792 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8793 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8794 function e._default_log_handler(a,t,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8795 return io.stderr:write(a,"\t",t,"\t",o,"\n");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8796 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8797 e.set_log_handler(e._default_log_handler,{"error"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8798 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8799 e.log("error","Error: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8800 e.log("error","Traceback: %s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8802 function e.set_error_handler(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8803 o=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8804 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8805 function e.loop()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8806 return xpcall(a.loop,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8807 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8808 function e.step()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8809 return xpcall(a.step,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8810 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8811 function e.quit()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8812 return a.setquitting("once");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8813 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8814 function t:listen(t,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8815 t=t or"localhost";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8816 o=o or 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8817 local e,a=a.addserver(t,o,e.new_listener(self,"server"),"*a");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8818 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8819 self:debug("Bound to %s:%s",t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8820 self.server=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8821 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8822 return e,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8823 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8824 function t:connect(i,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8825 i=i or"localhost";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8826 o=tonumber(o)or 5222;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8827 local n=h.tcp()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8828 n:settimeout(0);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8829 n:setoption("keepalive",true);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8830 local s,t=n:connect(i,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8831 if not s and t~="timeout"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8832 self:warn("connect() to %s:%d failed: %s",i,o,t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8833 return self:event("disconnected",{reason=t})or false,t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8834 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8835 local e=a.wrapclient(n,i,o,e.new_listener(self),"*a");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8836 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8837 self:warn("connection initialisation failed: %s",t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8838 return self:event("disconnected",{reason=t})or false,t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8839 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8840 self:set_conn(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8841 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8842 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8843 function t:set_conn(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8844 self.conn=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8845 self.send=function(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8846 self:event("outgoing",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8847 e=tostring(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8848 self:event("outgoing-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8849 return t:write(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8850 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8851 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8852 function t:close(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8853 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8854 e.log("error","Attempt to close disconnected connection - possibly a bug");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8855 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8857 local e=self.conn.disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8858 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8859 e(self.conn,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8860 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8861 function t:debug(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8862 return self.logger("debug",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8863 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8864 function t:info(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8865 return self.logger("info",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8866 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8867 function t:warn(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8868 return self.logger("warn",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8869 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8870 function t:error(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8871 return self.logger("error",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8872 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8873 function t:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8874 self:debug("Firing event: "..tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8875 return self.events.fire_event(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8876 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8877 function t:hook(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8878 return self.events.add_handler(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8879 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8880 function t:unhook(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8881 return self.events.remove_handler(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8882 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8883 function e.eventable(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8884 e.events=s.new();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8885 e.hook,e.unhook=t.hook,t.unhook;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8886 local t=e.events.fire_event;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8887 function e:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8888 return t(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8889 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8890 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8891 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8892 function t:add_plugin(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8893 if self.plugins[t]then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8894 if require("verse.plugins."..t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8895 local a,e=e.plugins[t](self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8896 if a~=false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8897 self:debug("Loaded %s plugin",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8898 self.plugins[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8899 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8900 self:warn("Failed to load %s plugin: %s",t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8901 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8902 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8903 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8904 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8905 function e.new_listener(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8906 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8907 function a.onconnect(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8908 if t.server then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8909 local a=e.new();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8910 o:setlistener(e.new_listener(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8911 a:set_conn(o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8912 t:event("connected",{client=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8913 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8914 t.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8915 t:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8916 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8917 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8918 function a.onincoming(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8919 t:event("incoming-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8920 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8921 function a.ondisconnect(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8922 if a~=t.conn then return end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8923 t.connected=false;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8924 t:event("disconnected",{reason=e});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8925 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8926 function a.ondrain(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8927 t:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8928 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8929 function a.onstatus(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8930 t:event("status",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8931 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8932 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8933 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8934 return e;

mercurial