verse.lua

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

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 23 Mar 2023 15:30:32 +0000
changeset 178
e547ddf8b64d
parent 177
3c19b67a1f0f
child 180
249197af6c01
permissions
-rw-r--r--

Remove dependency on util.iterators

I mistakenly thought it was bundled with verse.

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"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
18 idna={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 stringprep={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
20 base64={encode=e.b64,decode=e.unb64};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
21 utf8={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
22 valid=(utf8 and utf8.len)and function(e)return not not utf8.len(e);end or function()return true;end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
23 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
24 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
26 package.preload['util.sha1']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
27 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
28 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
29 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
30 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
31 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
32 (select(t,...))(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 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
35 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
36 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
37 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
38 local m=string.len
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
39 local o=string.char
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
40 local k=string.byte
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
41 local q=string.sub
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
42 local c=math.floor
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
43 local t=require"bit"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
44 local j=t.bnot
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
45 local e=t.band
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
46 local y=t.bor
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
47 local n=t.bxor
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
48 local a=t.lshift
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
49 local i=t.rshift
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
50 local u,r,l,d,h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
51 local function p(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
52 return a(t,e)+i(t,32-e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
53 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
54 local function s(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
55 local t,a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
56 local t=""
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
57 for n=1,8 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
58 a=e(i,15)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
59 if(a<10)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
60 t=o(a+48)..t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
61 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
62 t=o(a+87)..t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
63 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
64 i=c(i/16)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
65 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
66 return t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
67 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
68 local function g(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
69 local i,a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
70 local n=""
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
71 i=m(t)*8
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
72 t=t..o(128)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
73 a=56-e(m(t),63)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
74 if(a<0)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
75 a=a+64
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
76 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
77 for e=1,a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
78 t=t..o(0)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
79 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
80 for t=1,8 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
81 n=o(e(i,255))..n
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
82 i=c(i/256)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
83 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
84 return t..n
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
85 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
86 local function b(w)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
87 local m,t,o,a,f,s,c,v
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
88 local i,i
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
89 local i={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
90 while(w~="")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
91 for e=0,15 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
92 i[e]=0
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
93 for t=1,4 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
94 i[e]=i[e]*256+k(w,e*4+t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
95 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
96 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
97 for e=16,79 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
98 i[e]=p(n(n(i[e-3],i[e-8]),n(i[e-14],i[e-16])),1)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
99 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
100 m=u
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
101 t=r
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
102 o=l
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
103 a=d
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
104 f=h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
105 for h=0,79 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
106 if(h<20)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
107 s=y(e(t,o),e(j(t),a))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
108 c=1518500249
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
109 elseif(h<40)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
110 s=n(n(t,o),a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
111 c=1859775393
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
112 elseif(h<60)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
113 s=y(y(e(t,o),e(t,a)),e(o,a))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
114 c=2400959708
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
115 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
116 s=n(n(t,o),a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
117 c=3395469782
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
118 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
119 v=p(m,5)+s+f+c+i[h]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
120 f=a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
121 a=o
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
122 o=p(t,30)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
123 t=m
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
124 m=v
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
125 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
126 u=e(u+m,4294967295)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
127 r=e(r+t,4294967295)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
128 l=e(l+o,4294967295)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
129 d=e(d+a,4294967295)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
130 h=e(h+f,4294967295)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
131 w=q(w,65)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
132 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
133 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
134 local function a(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
135 e=g(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
136 u=1732584193
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
137 r=4023233417
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
138 l=2562383102
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
139 d=271733878
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
140 h=3285377520
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
141 b(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
142 local e=s(u)..s(r)..s(l)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
143 ..s(d)..s(h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
144 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
145 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
146 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
147 return(e:gsub("..",function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
148 return string.char(tonumber(e,16));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
149 end));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
150 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
151 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
152 _G.sha1={sha1=a};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
153 return _G.sha1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 package.preload['lib.adhoc']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
156 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
157 local function d(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
158 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
159 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
160 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
161 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
162 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
163 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
164 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
165 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
166 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
167 local s,l=require"util.stanza",require"util.id".short;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
168 local r="http://jabber.org/protocol/commands";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
169 local n={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
170 local h={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
171 local function i(o,e,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
172 local e=s.stanza("command",{xmlns=r,node=o.node,status=e});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 if t then e.attr.sessionid=t;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174 if a then e.attr.action=a;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
177 function h.new(e,o,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
178 return{name=e,node=o,handler=a,cmdtag=i,permission=(t or"user")};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
179 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
180 function h.handle_cmd(o,h,t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
181 local e=t.tags[1].attr.sessionid or l();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
182 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
183 a.to=t.attr.to;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
184 a.from=t.attr.from;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
185 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
186 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
187 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
188 n[e]=i;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
189 local i=s.reply(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
190 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
191 if a.status=="completed"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
192 n[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
193 t=o:cmdtag("completed",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
194 elseif a.status=="canceled"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
195 n[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
196 t=o:cmdtag("canceled",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
197 elseif a.status=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
198 n[e]=nil;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
199 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
200 h.send(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
203 t=o:cmdtag("executing",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
204 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
205 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
206 if a=="info"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
207 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
208 elseif a=="warn"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
209 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
210 elseif a=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
211 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
212 elseif a=="actions"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
213 local a=s.stanza("actions");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
214 for i,e in ipairs(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 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
216 a:tag(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
217 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
218 d:log("error",'Command "'..o.name..
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
219 '" 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
220 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
221 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
222 t:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
223 elseif a=="form"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
224 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
225 elseif a=="result"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
226 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
227 elseif a=="other"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
228 t:add_child(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
229 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
230 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
231 i:add_child(t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
232 h.send(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
235 return h;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
236 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
237 package.preload['util.table']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
238 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
239 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
240 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
241 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
242 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
243 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
244 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
245 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
246 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
247 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
248 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
249 return{pack=function(...)return{n=select("#",...);...}end;create=function()return{}end}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
250 end)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 package.preload['util.stanza']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
252 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
253 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
254 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
255 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
256 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
257 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
258 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
259 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
260 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
261 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
262 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
263 local a=error;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
264 local o=table.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
265 local l=table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
266 local m=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
267 local d=string.match;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
268 local f=tostring;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
269 local u=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
270 local x=getmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
271 local h=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
272 local s=ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
273 local t=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
274 local j=string.gsub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
275 local y=string.sub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
276 local r=string.find;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
277 local c=table.move or require"util.table".move;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
278 local b=require"util.table".create;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
279 local v=require"util.encodings".utf8.valid;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
280 local q,p=pcall(require,"util.termcolours");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
281 local g="urn:ietf:params:xml:ns:xmpp-stanzas";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
282 local k={xmlns=g};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
283 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
284 local e={__name="stanza"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
285 e.__index=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
286 local function i(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
287 return not r(t,e and"[^\1\9\10\13\20-\255]"or"[^\9\10\13\20-\255]");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
288 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
289 local function n(o,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
290 if t(o)~="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
291 a("invalid "..e.." name: expected string, got "..t(o));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
292 elseif#o==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
293 a("invalid "..e.." name: empty string");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
294 elseif r(o,"[<>& '\"]")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
295 a("invalid "..e.." name: contains invalid characters");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
296 elseif not i(o,e=="attribute")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
297 a("invalid "..e.." name: contains control characters");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
298 elseif not v(o)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
299 a("invalid "..e.." name: contains invalid utf8");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
300 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
301 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
302 local function w(e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
303 if t(e)~="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
304 a("invalid "..o.." value: expected string, got "..t(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
305 elseif not i(e,false)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
306 a("invalid "..o.." value: contains control characters");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
307 elseif not v(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
308 a("invalid "..o.." value: contains invalid utf8");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
309 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
310 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
311 local function v(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
312 if e~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
313 if t(e)~="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
314 a("invalid attributes: expected table, got "..t(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
315 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
316 for t,e in h(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
317 n(t,"attribute");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
318 w(e,"attribute");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
319 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
320 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
321 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
322 local function i(t,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
323 n(t,"tag");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
324 v(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
325 local t={name=t,attr=a or{},namespaces=o,tags={}};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
326 return u(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
327 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
328 local function n(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
329 return x(t)==e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
330 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
331 function e:query(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
332 return self:tag("query",{xmlns=e});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
333 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
334 function e:body(t,e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
335 return self:text_tag("body",t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
336 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
337 function e:text_tag(e,t,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
338 return self:tag(e,o,a):text(t):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
339 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
340 function e:tag(t,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
341 local t=i(t,e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
342 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
343 if not e then e={};self.last_add=e;end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
344 (e[#e]or self):add_direct_child(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
345 o(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
346 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
347 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
348 function e:text(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
349 if t~=nil and t~=""then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351 (e and e[#e]or self):add_direct_child(t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
352 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 function e:up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 local e=self.last_add;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
357 if e then l(e);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
360 function e:at_top()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
361 return self.last_add==nil or#self.last_add==0
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
362 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 function e:reset()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
364 self.last_add=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
365 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
366 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
367 function e:add_direct_child(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
368 if n(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
369 o(self.tags,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
370 o(self,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
371 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
372 w(e,"text");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
373 o(self,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
374 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
375 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
376 function e:add_child(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
377 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
378 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
379 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
380 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
381 function e:remove_children(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
382 e=e or self.attr.xmlns;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
383 return self:maptags(function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
384 if(not a or t.name==a)and t.attr.xmlns==e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
385 return nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
386 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
387 return t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
388 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
389 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
390 function e:get_child(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
391 for o,e in s(self.tags)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
392 if(not a or e.name==a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
393 and((not t and self.attr.xmlns==e.attr.xmlns)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
394 or e.attr.xmlns==t)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
395 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
396 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
397 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
398 return nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
399 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
400 function e:get_child_text(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
401 local e=self:get_child(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
402 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
403 return e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
404 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
405 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
406 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
407 function e:get_child_attr(e,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
408 local e=self:get_child(e,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
409 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
410 return e.attr[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
411 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
412 return nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
413 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
414 function e:child_with_name(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
415 for a,e in s(self.tags)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
416 if e.name==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
417 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
418 return nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
419 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
420 function e:child_with_ns(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
421 for a,e in s(self.tags)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
422 if e.attr.xmlns==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
423 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
424 return nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
425 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
426 function e:get_child_with_attr(e,i,t,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
427 for e in self:childtags(e,i)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
428 if(a and a(e.attr[t])or e.attr[t])==o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
429 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
430 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
431 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
432 return nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
433 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
434 function e:children()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
435 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
436 return function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
437 e=e+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
438 return t[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
439 end,self,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
440 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
441 function e:childtags(o,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
442 local e=self.tags;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
443 local i,t=1,#e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
444 return function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
445 for t=i,t do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
446 local e=e[t];
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
447 if(not o or e.name==o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
448 and((not a and self.attr.xmlns==e.attr.xmlns)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
449 or e.attr.xmlns==a)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
450 i=t+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
451 return e;
12
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
454 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
455 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
456 function e:maptags(h)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
457 local o,t=self.tags,1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
458 local n,i=#self,#o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
459 local s=n+1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
460 local e=1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
461 while t<=i and i>0 do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
462 if self[e]==o[t]then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
463 local a=h(self[e]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
464 if a==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
465 l(self,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
466 l(o,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
467 n=n-1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
468 i=i-1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
469 e=e-1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
470 t=t-1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
471 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
472 self[e]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
473 o[t]=a;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
474 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
475 t=t+1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
476 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
477 e=e+1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
478 if e>s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
479 a("Invalid stanza state! Please report this error.");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
480 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
481 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
482 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
483 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
484 function e:find(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
485 local e=1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
486 local s=#a+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
487 repeat
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
488 local o,t,i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
489 local n=y(a,e,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
490 if n=="@"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
491 return self.attr[y(a,e+1)];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
492 elseif n=="{"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
493 o,e=d(a,"^([^}]+)}()",e+1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
494 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
495 t,i,e=d(a,"^([^@/#]*)([/#]?)()",e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
496 t=t~=""and t or nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
497 if e==s then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
498 if i=="#"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
499 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
500 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
501 return self:get_child(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
502 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
503 self=self:get_child(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
504 until not self
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
505 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
506 local function l(t,s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
507 local n={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
508 for t,e in h(t.attr)do n[t]=e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
509 local a,i=t.namespaces;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
510 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
511 i={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
512 for e,t in h(a)do i[e]=t;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
513 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
514 local o,a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
515 if s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
516 o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
517 a={name=t.name,attr=n,namespaces=i,tags=o};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
518 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
519 o=b(#t.tags,0);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
520 a=b(#t,4);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
521 a.name=t.name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
522 a.attr=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
523 a.namespaces=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
524 a.tags=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
525 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
526 u(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
527 if not s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
528 c(t,1,#t,1,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
529 c(t.tags,1,#t.tags,1,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
530 a:maptags(l);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
531 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
532 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
533 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
534 local function u(e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
535 if not n(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
536 a("bad argument to clone: expected stanza, got "..t(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
537 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
538 return l(e,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
539 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
540 local l={["'"]="&apos;",["\""]="&quot;",["<"]="&lt;",[">"]="&gt;",["&"]="&amp;"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
541 local function c(e)return(j(e,"['&<>\"]",l));end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
542 local function l(a,e,s,t,u)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
543 local i=0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
544 local l=a.name
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
545 o(e,"<"..l);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
546 for a,n in h(a.attr)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
547 if r(a,"\1",1,true)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
548 local s,a=d(a,"^([^\1]*)\1?(.*)$");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
549 i=i+1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
550 o(e," xmlns:ns"..i.."='"..t(s).."' ".."ns"..i..":"..a.."='"..t(n).."'");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
551 elseif not(a=="xmlns"and n==u)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
552 o(e," "..a.."='"..t(n).."'");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
553 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
554 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
555 local i=#a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
556 if i==0 then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
557 o(e,"/>");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
558 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
559 o(e,">");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
560 for i=1,i do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
561 local i=a[i];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
562 if i.name then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
563 s(i,e,s,t,a.attr.xmlns);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
564 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
565 o(e,t(i));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
566 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
567 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
568 o(e,"</"..l..">");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
569 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
570 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
571 function e.__tostring(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
572 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
573 l(t,e,l,c,nil);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
574 return m(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
575 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
576 function e.top_tag(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
577 local e=u(e,true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
578 return f(e):sub(1,-3)..">";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
579 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
580 function e.get_text(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
581 if#e.tags==0 then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
582 return m(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
583 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
584 return nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
585 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
586 function e.get_error(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
587 local i,t,a,o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
588 local e=e:get_child("error");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
589 if not e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
590 return nil,nil,nil,nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
591 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
592 i=e.attr.type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
593 for i,e in s(e.tags)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
594 if e.attr.xmlns==g then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
595 if not a and e.name=="text"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
596 a=e:get_text();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
597 elseif not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
598 t=e.name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
599 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
600 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
601 o=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
602 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
603 if t and a and o then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
604 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
605 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
606 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
607 return i,t or"undefined-condition",a,o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
608 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
609 function e.add_error(o,a,s,h,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
610 local e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
611 if t(a)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
612 if t(a.extra)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
613 e=a.extra;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
614 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
615 if t(a.context)=="table"and t(a.context.by)=="string"then i=a.context.by;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
616 a,s,h=a.type,a.condition,a.text;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
617 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
618 if o.attr.from==i then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
619 i=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
620 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
621 o:tag("error",{type=a,by=i})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
622 :tag(s,k);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
623 if e and s=="gone"and t(e.uri)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
624 o:text(e.uri);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
625 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
626 o:up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
627 if h then o:text_tag("text",h,k);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
628 if e and n(e.tag)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
629 o:add_child(e.tag);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
630 elseif e and e.namespace and e.condition then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
631 o:tag(e.condition,{xmlns=e.namespace}):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
632 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
633 return o:up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
634 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
635 local function l(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
636 local i={name=a.name,attr=a.attr};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
637 for a,e in s(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
638 if t(e)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
639 o(i,l(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
640 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
641 o(i,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
642 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
643 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
644 return i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
645 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
646 e.__freeze=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
647 local function m(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
648 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
649 local e=a.attr;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
650 local o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
651 for e,a in h(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
652 if t(e)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
653 if r(e,"|",1,true)and not r(e,"\1",1,true)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
654 local e,t=d(e,"^([^|]+)|(.+)$");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
655 o[e.."\1"..t]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
656 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
657 o[e]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
658 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
659 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
660 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
661 local o=i(a.name,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
662 for a,e in s(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
663 if t(e)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
664 o:add_direct_child(m(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
665 elseif t(e)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
666 o:add_direct_child(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
667 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
668 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
669 return o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
670 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
671 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
672 local function y(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
673 if not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
674 return i("message",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
675 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
676 return i("message",e):text_tag("body",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
677 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
678 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
679 local function v(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
680 if not e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
681 a("iq stanzas require id and type attributes");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
682 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
683 if not e.id then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
684 a("iq stanzas require an id attribute");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
685 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
686 if not e.type then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
687 a("iq stanzas require a type attribute");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
688 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
689 return i("iq",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
690 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
691 local function r(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
692 if not n(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
693 a("bad argument to reply: expected stanza, got "..t(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
694 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
695 return i(e.name,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
696 {
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
697 to=e.attr.from,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
698 from=e.attr.to,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
699 id=e.attr.id,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
700 type=((e.name=="iq"and"result")or e.attr.type)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
701 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
702 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
703 local function w(e,s,h,i,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
704 if not n(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
705 a("bad argument to error_reply: expected stanza, got "..t(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
706 elseif e.attr.type=="error"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
707 a("bad argument to error_reply: got stanza of type error which must not be replied to");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
708 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
709 local e=r(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
710 e.attr.type="error";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
711 e:add_error(s,h,i,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
712 e.last_add={e[1]};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
713 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
714 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
715 local function d(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
716 return i("presence",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
717 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
718 local s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
719 if q then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
720 local a,t=p.getstyle,p.getstring;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
721 local n=a("1b3967");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
722 local r=a("13b5ea");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
723 local o=a("439639");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
724 local i=a("a0ce67");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
725 local h=a("d9541e");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
726 local a=a("e96d1f");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
727 local h=(
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
728 t(i,"%1")..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
729 t(o,"%2")..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
730 t(h,"%3")..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
731 t(a,"%4")..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
732 t(h,"%5")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
733 );
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
734 local d=(
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
735 t(o,"%1")..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
736 t(i,"%2")..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
737 t(o,"%3")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
738 );
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
739 function s(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
740 return(e:gsub("(<[?/]?)([^ >/?]*)(.-)([?/]?>)([^<]*)",function(o,e,a,i,s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
741 return t(n,o)..t(r,e)..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
742 a:gsub("([^=]+)(=)([\"'])(.-)([\"'])",h)..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
743 t(n,i)..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
744 s:gsub("(&#?)(%w+)(;)",d);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
745 end,100));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
746 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
747 function e.pretty_print(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
748 return s(f(e));
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
749 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
750 function e.pretty_top_tag(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
751 return s(e:top_tag());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
752 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
753 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
754 e.pretty_print=e.__tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
755 e.pretty_top_tag=e.top_tag;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
756 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
757 function e.indent(i,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
758 if#i==0 or(#i==1 and t(i[1])=="string")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
759 return i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
760 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
761 a=a or"\t";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
762 o=o or 1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
763 local e=u(i,true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
764 for i in i:children()do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
765 if t(i)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
766 if i:find("%S")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
767 e:text("\n"..a:rep(o));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
768 e:text(i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
769 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
770 elseif n(i)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
771 e:text("\n"..a:rep(o));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
772 e:add_direct_child(i:indent(o+1,a));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
773 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
774 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
775 e:text("\n"..a:rep((o-1)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
776 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
777 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
778 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
779 stanza_mt=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
780 stanza=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
781 is_stanza=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
782 preserialize=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
783 deserialize=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
784 clone=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
785 message=y;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
786 iq=v;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
787 reply=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
788 error_reply=w;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
789 presence=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
790 xml_escape=c;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
791 pretty_print=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
792 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
793 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
794 package.preload['util.timer']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
795 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
796 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
797 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
798 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
799 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
800 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
801 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
802 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
803 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
804 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
805 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
806 local a=require"util.indexedbheap";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
807 local t=require"util.logger".init("timer");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
808 local e=require"net.server";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
809 local d=require"util.time".now
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
810 local l=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
811 local h=debug.traceback;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
812 local i=tostring;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
813 local c=require"util.xpcall".xpcall;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
814 local f=math.max;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
815 local m=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
816 if e.timer then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
817 return e.timer;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
818 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
819 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
820 local r=e.add_task;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
821 local o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
822 local s=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
823 local a=a.create();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
824 local n={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
825 local e=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
826 local function u(e)t("error","Traceback[timer]: %s",h(i(e),2));end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
827 local function h(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
828 local t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
829 local o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
830 while true do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
831 t=a:peek();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
832 if t==nil or t>i then break;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
833 local t,a,e=a:pop();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
834 local s=n[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
835 n[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
836 local h,t=c(a,u,i,e,s);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
837 if h and l(t)=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
838 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
839 o[e]={a,t+i};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
840 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
841 o={[e]={a,t+i}};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
842 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
843 n[e]=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
844 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
845 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
846 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
847 for o,e in m(o)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
848 a:insert(e[1],e[2],o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
849 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
850 t=a:peek();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
851 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
852 if t~=nil and s>1 and t==e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
853 t=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
854 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
855 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
856 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
857 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
858 return t-i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
859 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
860 s=s-1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
861 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
862 local function u(t,u,l)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
863 local i=d();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
864 local t=i+t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
865 local a=a:insert(u,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
866 n[a]=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
867 if e==nil or t<e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
868 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
869 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
870 o:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
871 o=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
872 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
873 s=s+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
874 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
875 o=r(e-i,h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
876 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
877 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
878 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
879 local function l(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
880 n[t]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
881 local s,i,n=a:remove(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
882 local t=a:peek();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
883 if t~=e and o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
884 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
885 o:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
886 if e~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
887 o=r(f(e-d(),0),h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
888 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
889 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
890 return s,i,n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
891 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
892 local function s(o,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
893 local i=d();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
894 local t=i+n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
895 a:reprioritize(o,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
896 if e==nil or t<e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
897 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
898 r(e-i,h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
899 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
900 return o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
901 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
902 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
903 add_task=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
904 stop=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
905 reschedule=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
906 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
907 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
908 package.preload['util.termcolours']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
909 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
910 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
911 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
912 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
913 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
914 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
915 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
916 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
917 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
918 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
919 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
920 local s,h=table.concat,table.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
921 local a,r=string.char,string.format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
922 local o=tonumber;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
923 local m=ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
924 local u=io.write;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
925 local i=math.floor;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
926 local l=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
927 local d=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
928 local c=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
929 local t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
930 if os.getenv("WINDIR")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
931 t=require"util.windows";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
932 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
933 local n=t and t.get_consolecolor and t.get_consolecolor();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
934 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
935 local e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
936 reset=0;bright=1,dim=2,underscore=4,blink=5,reverse=7,hidden=8;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
937 black=30;red=31;green=32;yellow=33;blue=34;magenta=35;cyan=36;white=37;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
938 ["black background"]=40;["red background"]=41;["green background"]=42;["yellow background"]=43;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
939 ["blue background"]=44;["magenta background"]=45;["cyan background"]=46;["white background"]=47;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
940 bold=1,dark=2,underline=4,underlined=4,normal=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
941 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
942 local w={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
943 ["0"]=n,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
944 ["1"]=7+8,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
945 ["1;33"]=2+4+8,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
946 ["1;31"]=4+8
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
947 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
948 local y={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
949 [1]="font-weight: bold",[2]="opacity: 0.5",[4]="text-decoration: underline",[8]="visibility: hidden",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
950 [30]="color:black",[31]="color:red",[32]="color:green",[33]="color:#FFD700",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
951 [34]="color:blue",[35]="color: magenta",[36]="color:cyan",[37]="color: white",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
952 [40]="background-color:black",[41]="background-color:red",[42]="background-color:green",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
953 [43]="background-color:yellow",[44]="background-color:blue",[45]="background-color: magenta",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
954 [46]="background-color:cyan",[47]="background-color: white";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
955 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
956 local a=a(27).."[%sm%s"..a(27).."[0m";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
957 local function p(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
958 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
959 return r(a,e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
960 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
961 return t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
962 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
963 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
964 local function v(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
965 return i(e*3/32)+232;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
966 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
967 local function f(t,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
968 if t==e and e==a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
969 return v(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
970 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
971 t=i(t*3/128);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
972 e=i(e*3/128);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
973 a=i(a*3/128);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
974 return 16+(t*36)+(e*6)+(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
975 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
976 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
977 local a=o(e:sub(1,2),16);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
978 local t=o(e:sub(3,4),16);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
979 local e=o(e:sub(5,6),16);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
980 return a,t,e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
981 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
982 d(e,{__index=function(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
983 if l(e)=="string"and e:find("%x%x%x%x%x%x")==1 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
984 local t=e:sub(7)==" background"and"48;5;"or"38;5;";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
985 return r("%s%d",t,f(i(e)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
986 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
987 end});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
988 local a={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
989 red="ff0000";fuchsia="ff00ff";green="008000";white="ffffff";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
990 lime="00ff00";yellow="ffff00";purple="800080";blue="0000ff";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
991 aqua="00ffff";olive="808000";black="000000";navy="000080";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
992 teal="008080";silver="c0c0c0";maroon="800000";gray="808080";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
993 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
994 for t,a in c(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
995 e[t]=e[t]or e[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
996 t,a=t.." background",a.." background"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
997 e[t]=e[t]or e[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
998 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
999 local function r(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1000 local t,a={...},{};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1001 for o,t in m(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1002 t=e[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1003 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1004 h(a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1005 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1006 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1007 return s(a,";");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1008 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1009 local a="0";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1010 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1011 e=e or"0";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1012 if e~=a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1013 u("\27["..e.."m");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1014 a=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1015 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1016 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1017 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1018 function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1019 e=e or"0";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1020 if e~=a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1021 t.set_consolecolor(w[e]or n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1022 a=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1023 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1024 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1025 if not n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1026 function i()end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1027 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1028 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1029 local function a(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1030 if t=="0"then return"</span>";end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1031 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1032 for t in t:gmatch("[^;]+")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1033 h(e,y[o(t)]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1034 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1035 return"</span><span style='"..s(e,";").."'>";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1036 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1037 local function t(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1038 return e:gsub("\027%[(.-)m",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1039 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1040 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1041 getstring=p;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1042 getstyle=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1043 setstyle=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1044 tohtml=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1045 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1046 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1047 package.preload['util.uuid']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1048 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1049 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1050 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1051 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1052 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1053 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1054 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1055 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1056 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1057 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1058 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1059 local a=require"util.random";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1060 local t=a.bytes;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1061 local i=require"util.hex".encode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1062 local o=math.ceil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1063 local function e(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1064 return i(t(o(e/2))):sub(1,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1065 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1066 local function o()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1067 return("%x"):format(t(1):byte()%4+8);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1068 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1069 local function t()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1070 return e(8).."-"..e(4).."-4"..e(3).."-"..(o())..e(3).."-"..e(12);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1071 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1072 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1073 get_nibbles=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1074 generate=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1075 seed=a.seed;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1076 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1077 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1078 package.preload['util.time']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1079 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1080 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1081 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1082 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1083 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1084 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1085 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1086 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1087 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1088 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1089 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1090 local o=require"socket".gettime;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1091 local e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1092 local t,a=pcall(require,"system");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1093 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1094 e=a.monotime;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1095 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1096 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1097 now=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1098 monotonic=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1099 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1100 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1101 package.preload['util.envload']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1102 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1103 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1104 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1105 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1106 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1107 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1108 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1109 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1110 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1111 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1112 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1113 local t=load;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1114 local i=io.open;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1115 local function s(o,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1116 return t(o,a,nil,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1117 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1118 local function h(a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1119 local e,i,n=i(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1120 if not e then return e,i,n;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1121 local a,t=t(e:lines(2048),"@"..a,nil,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1122 e:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1123 return a,t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1124 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1125 return{envload=s,envloadfile=h};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1126 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1127 package.preload['util.id']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1128 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1129 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1130 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
1131 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1132 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1133 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1134 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1135 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1136 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1137 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1138 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1139 local t=string.gsub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1140 local o=require"util.random".bytes;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1141 local a=require"util.encodings".base64.encode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1142 local i={["+"]="-",["/"]="_",["="]=""};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1143 local function e(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1144 return(t(a(o(e)),"[+/=]",i));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1145 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1146 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1147 tiny=function()return e(3);end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1148 short=function()return e(9);end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1149 medium=function()return e(18);end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1150 long=function()return e(27);end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1151 custom=function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1152 return function()return e(t);end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1153 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1154 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1155 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1156 package.preload['util.serialization']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1157 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1158 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1159 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1160 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1161 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1162 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1163 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1164 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1165 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1166 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1167 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1168 local _=getmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1169 local t,a=next,type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1170 local n=string.format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1171 local z=string.gsub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1172 local c=string.rep;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1173 local o=string.char;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1174 local k=string.match;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1175 local q=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1176 local g=require"util.hex".to;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1177 local p=pcall;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1178 local v=require"util.envload".envload;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1179 if not math.type then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1180 require"util.mathcompat"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1181 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1182 local b,j=math.huge,-math.huge;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1183 local x=math.type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1184 local function h(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1185 return t,e,nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1186 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1187 local function s(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1188 error("Can't serialize "..a(t)..(e and": "..e or""));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1189 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1190 local function t(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1191 return n("{__type=%q,__error=%q}",a(e),t or"fail");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1192 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1193 local r={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1194 ['\a']=[[\a]];['\b']=[[\b]];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1195 ['\f']=[[\f]];['\n']=[[\n]];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1196 ['\r']=[[\r]];['\t']=[[\t]];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1197 ['\v']=[[\v]];['\\']=[[\\]];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1198 ['\"']=[[\"]];['\'']=[[\']];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1199 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1200 for t=0,255 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1201 local e=o(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1202 if not r[e]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1203 r[e]=n("\\%03d",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1204 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1205 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1206 local o={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1207 ["do"]=true;["and"]=true;["else"]=true;["break"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1208 ["if"]=true;["end"]=true;["goto"]=true;["false"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1209 ["in"]=true;["for"]=true;["then"]=true;["local"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1210 ["or"]=true;["nil"]=true;["true"]=true;["until"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1211 ["elseif"]=true;["function"]=true;["not"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1212 ["repeat"]=true;["return"]=true;["while"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1213 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1214 local function u(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1215 if a(e)~="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1216 e={preset=e};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1217 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1218 local i={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1219 table=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1220 string=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1221 number=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1222 boolean=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1223 ["nil"]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1224 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1225 if e.preset=="debug"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1226 e.preset="oneline";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1227 e.freeze=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1228 e.fatal=false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1229 e.fallback=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1230 e.unquoted=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1231 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1232 if e.preset=="oneline"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1233 e.indentwith=e.indentwith or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1234 e.itemstart=e.itemstart or" ";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1235 e.itemlast=e.itemlast or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1236 e.tend=e.tend or" }";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1237 elseif e.preset=="compact"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1238 e.indentwith=e.indentwith or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1239 e.itemstart=e.itemstart or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1240 e.itemlast=e.itemlast or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1241 e.equals=e.equals or"=";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1242 e.unquoted=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1243 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1244 local s=e.fallback or e.fatal==false and t or s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1245 local function l(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1246 return(i[a(e)]or s)(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1247 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1248 local p=e.keywords or o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1249 local y=e.indentwith or"\t";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1250 local v=e.itemstart or"\n";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1251 local I=e.itemsep or";";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1252 local N=e.itemlast or";\n";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1253 local O=e.tstart or"{";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1254 local E=e.tend or"}";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1255 local T=e.kstart or"[";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1256 local A=e.kend or"]";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1257 local f=e.equals or" = ";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1258 local w=e.unquoted==true and"^[%a_][%w_]*$"or e.unquoted;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1259 local d=e.hex;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1260 local S=e.freeze;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1261 local m=e.maxdepth or 127;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1262 local H=e.multiref;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1263 local R=e.table_iterator or h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1264 local function u(o,t,e,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1265 if t[o]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1266 t[e],e=s(o,"table has multiple references"),e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1267 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1268 elseif i>m then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1269 t[e],e=s(o,"max table depth reached"),e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1270 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1271 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1272 local m=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1273 t[o]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1274 t[m]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1275 if S==true then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1276 local i=_(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1277 if a(i)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1278 local n=i.__name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1279 local i=i.__freeze;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1280 if a(i)=="function"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1281 o=i(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1282 if a(o)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1283 t[e],e=o,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1284 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1285 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1286 if a(n)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1287 t[e],e=n,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1288 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1289 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1290 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1291 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1292 t[e],e=O,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1293 local b=c(y,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1294 local s=1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1295 local h,r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1296 local d=false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1297 for o,n in R(o)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1298 d=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1299 t[e],e=v,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1300 t[e],e=b,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1301 h,r=a(o),a(n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1302 if o==s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1303 s=s+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1304 elseif w and h=="string"and
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1305 not p[o]and k(o,w)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1306 t[e],e=o,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1307 t[e],e=f,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1308 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1309 t[e],e=T,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1310 if h=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1311 e=u(o,t,e,i+1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1312 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1313 t[e],e=l(o),e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1314 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1315 t[e],t[e+1],e=A,f,e+2;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1316 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1317 if r=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1318 e=u(n,t,e,i+1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1319 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1320 t[e],e=l(n),e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1321 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1322 t[e],e=I,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1323 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1324 if d then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1325 t[e-1]=N;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1326 t[e],e=c(y,i-1),e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1327 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1328 t[e],e=E,e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1329 if H then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1330 t[o]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1331 t[m]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1332 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1333 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1334 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1335 function i.table(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1336 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1337 u(t,e,1,1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1338 return q(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1339 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1340 local function t(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1341 return'"'..z(e,"[%z\1-\31\"\'\\\127-\255]",r)..'"';
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1342 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1343 if a(d)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1344 function i.string(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1345 local t=t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1346 if#t>(#e*2+2+#d)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1347 return d..'"'..g(e)..'"';
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1348 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1349 return t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1350 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1351 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1352 i.string=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1353 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1354 function i.number(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1355 if x(e)=="integer"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1356 return n("%d",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1357 elseif e==b then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1358 return"(1/0)";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1359 elseif e==j then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1360 return"(-1/0)";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1361 elseif e~=e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1362 return"(0/0)";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1363 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1364 return n("%.18g",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1365 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1366 i["nil"]=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1367 return"nil";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1368 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1369 function i.boolean(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1370 return e and"true"or"false";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1371 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1372 return l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1373 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1374 local function o(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1375 if a(e)~="string"then return nil;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1376 e="return "..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1377 local e,t=v(e,"=serialized data",{});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1378 if not e then return nil,t;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1379 local t,e=p(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1380 if not t then return nil,e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1381 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1382 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1383 local a=u();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1384 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1385 new=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1386 serialize=function(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1387 if t==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1388 return a(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1389 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1390 return u(t)(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1391 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1392 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1393 deserialize=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1394 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1395 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1396 package.preload['util.indexedbheap']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1397 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1398 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1399 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
1400 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1401 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1402 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1403 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1404 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1405 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1406 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1407 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1408 local d=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1409 local r=math.floor;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1410 local i=table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1411 local function l(t,s,o,n,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1412 local e=#t+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1413 while true do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1414 local a=r(e/2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1415 if a==0 or s>t[a]then break;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1416 t[e]=t[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1417 o[e]=o[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1418 i[o[e]]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1419 e=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1420 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1421 t[e]=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1422 o[e]=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1423 i[n]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1424 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1425 local function h(a,e,t,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1426 local n=a[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1427 local s=t[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1428 while e~=1 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1429 local o=r(e/2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1430 if n>=a[o]then break;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1431 a[e]=a[o];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1432 t[e]=t[o];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1433 i[t[e]]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1434 e=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1435 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1436 a[e]=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1437 t[e]=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1438 i[s]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1439 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1440 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1441 local function n(a,e,o,h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1442 local s=a[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1443 local n=o[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1444 local i=#a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1445 local t=2*e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1446 while 2*e<=i do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1447 if t~=i and a[t]>a[t+1]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1448 t=t+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1449 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1450 if s>a[t]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1451 a[e]=a[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1452 o[e]=o[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1453 h[o[e]]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1454 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1455 break;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1456 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1457 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1458 t=2*e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1459 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1460 a[e]=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1461 o[e]=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1462 h[n]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1463 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1464 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1465 local function r(e,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1466 local h=#e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1467 if h==0 then return nil;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1468 local s=e[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1469 local a=t[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1470 o[a]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1471 if h==1 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1472 e[1]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1473 t[1]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1474 return s,a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1475 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1476 e[1]=i(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1477 t[1]=i(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1478 o[t[1]]=1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1479 n(e,1,t,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1480 return s,a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1481 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1482 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1483 function t:insert(t,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1484 if e==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1485 e=self.current_id;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1486 self.current_id=e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1487 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1488 self.items[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1489 l(self.priorities,a,self.ids,e,self.index);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1490 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1491 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1492 function t:pop()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1493 local a,e=r(self.priorities,self.ids,self.index);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1494 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1495 local t=self.items[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1496 self.items[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1497 return a,t,e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1498 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1499 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1500 function t:peek()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1501 return self.priorities[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1502 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1503 function t:reprioritize(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1504 local e=self.index[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1505 if e==nil then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1506 self.priorities[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1507 e=h(self.priorities,e,self.ids,self.index);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1508 n(self.priorities,e,self.ids,self.index);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1509 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1510 function t:remove_index(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1511 local o=self.priorities[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1512 if o==nil then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1513 local t=self.ids[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1514 local s=self.items[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1515 local a=#self.priorities;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1516 self.priorities[e]=self.priorities[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1517 self.ids[e]=self.ids[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1518 self.index[self.ids[e]]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1519 i(self.priorities);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1520 i(self.ids);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1521 self.index[t]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1522 self.items[t]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1523 if a>e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1524 e=h(self.priorities,e,self.ids,self.index);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1525 n(self.priorities,e,self.ids,self.index);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1526 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1527 return o,s,t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1528 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1529 function t:remove(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1530 return self:remove_index(self.index[e]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1531 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1532 local e={__index=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1533 local e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1534 create=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1535 return d({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1536 ids={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1537 items={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1538 priorities={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1539 index={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1540 current_id=1.5
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1541 },e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1542 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1543 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1544 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1545 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1546 package.preload['util.xpcall']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1547 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1548 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1549 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1550 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1551 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1552 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1553 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1554 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1555 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1556 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1557 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1558 local e=xpcall;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1559 if select(2,e(function(e)return e end,function()end,"test"))~="test"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1560 e=require"util.compat".xpcall;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1561 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1562 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1563 xpcall=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1564 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1565 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1566 package.preload['util.array']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1567 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1568 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1569 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1570 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1571 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1572 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1573 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1574 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1575 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1576 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1577 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1578 local r,l,u,f
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1579 =table.insert,table.sort,table.remove,table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1580 local h=require"util.table".move;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1581 local s=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1582 local a=getmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1583 local d=math.random;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1584 local c=math.floor;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1585 local y,p=pairs,ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1586 local w=tostring;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1587 local m=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1588 local i={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1589 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1590 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1591 local o={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1592 __index=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1593 __name="array";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1594 __tostring=function(e)return"{"..e:concat(", ").."}";end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1595 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1596 function o:__freeze()return self;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1597 local function n(i,e,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1598 if m(e)=="function"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1599 e=i.collect(e,a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1600 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1601 return s(e or{},o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1602 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1603 function o.__add(t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1604 local e=n();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1605 return e:append(t):append(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1606 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1607 function o.__eq(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1608 if a(e)~=o or a(t)~=o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1609 return false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1610 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1611 if#e==#t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1612 for a=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1613 if e[a]~=t[a]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1614 return false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1615 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1616 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1617 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1618 return false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1619 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1620 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1621 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1622 function o.__div(t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1623 local a=n();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1624 local e=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1625 for i=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1626 local t=o(t[i]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1627 if t~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1628 e=e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1629 a[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1630 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1631 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1632 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1633 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1634 s(i,{__call=n});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1635 function e:random()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1636 return self[d(1,#self)];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1637 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1638 function e:random_other(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1639 local e=#self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1640 return self[((math.random(1,e-1)+(t-1))%e)+1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1641 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1642 function t.map(e,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1643 for t,o in p(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1644 e[t]=a(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1645 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1646 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1647 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1648 function t.filter(t,o,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1649 local i,a=o==t,#o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1650 local e=1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1651 for a=1,a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1652 local a=o[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1653 if n(a)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1654 t[e]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1655 e=e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1656 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1657 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1658 if i and e<=a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1659 for e=e,a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1660 t[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1661 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1662 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1663 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1664 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1665 function t.slice(a,t,o,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1666 if e==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1667 e=-1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1668 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1669 if e<0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1670 e=#t+(e+1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1671 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1672 if o<0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1673 o=#t+(o+1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1674 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1675 if o<1 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1676 o=1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1677 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1678 if e>#t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1679 e=#t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1680 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1681 if o>e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1682 for e=1,#a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1683 a[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1684 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1685 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1686 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1687 h(t,o,e,1,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1688 if t==a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1689 h(t,#a+1,#a*2,2+e-o,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1690 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1691 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1692 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1693 function t.sort(e,t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1694 if t~=e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1695 e:append(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1696 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1697 l(e,...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1698 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1699 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1700 function t.unique(o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1701 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1702 return t.filter(o,a,function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1703 if e[t]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1704 return false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1705 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1706 e[t]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1707 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1708 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1709 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1710 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1711 function t.pluck(a,e,o,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1712 for t=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1713 local e=e[t][o];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1714 if e==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1715 e=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1716 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1717 a[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1718 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1719 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1720 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1721 function t.reverse(e,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1722 local t=#i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1723 if i==e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1724 local a=c(t/2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1725 t=t+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1726 local o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1727 for a=1,a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1728 o=t-a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1729 e[a],e[o]=e[o],e[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1730 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1731 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1732 local a=t+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1733 for t=1,t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1734 e[t]=i[a-t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1735 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1736 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1737 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1738 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1739 function e:shuffle()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1740 local t=#self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1741 for e=1,#self do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1742 local t=d(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1743 self[e],self[t]=self[t],self[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1744 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1745 return self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1746 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1747 function e:append(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1748 h(e,1,#e,#self+1,self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1749 return self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1750 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1751 function e:push(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1752 r(self,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1753 return self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1754 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1755 e.pop=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1756 function e:concat(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1757 return f(i.map(self,w),e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1758 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1759 function e:length()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1760 return#self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1761 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1762 function i.collect(i,a,e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1763 local t={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1764 while true do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1765 e=i(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1766 if e==nil then break;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1767 r(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1768 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1769 return s(t,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1770 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1771 for t,a in y(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1772 local a=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1773 i[t]=function(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1774 local o=n();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1775 return a(o,t,...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1776 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1777 e[t]=function(e,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1778 return a(e,e,...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1779 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1780 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1781 return i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1782 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1783 package.preload['util.format']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1784 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1785 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1786 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
1787 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1788 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1789 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1790 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1791 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1792 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1793 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1794 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1795 local n=tostring;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1796 local m=table.unpack;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1797 local e=table.pack;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1798 local c=require"util.encodings".utf8.valid;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1799 local i=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1800 local l=require"util.serialization".new("debug");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1801 local r=math.type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1802 local u={c=true,d=true,i=true,o=true,u=true,X=true,x=true,};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1803 local f={o=true;u=true;x=true;X=true};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1804 local d={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1805 ["\000"]="\226\144\128",["\001"]="\226\144\129",["\002"]="\226\144\130",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1806 ["\003"]="\226\144\131",["\004"]="\226\144\132",["\005"]="\226\144\133",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1807 ["\006"]="\226\144\134",["\007"]="\226\144\135",["\008"]="\226\144\136",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1808 ["\009"]="\226\144\137",["\010"]="\226\144\138",["\011"]="\226\144\139",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1809 ["\012"]="\226\144\140",["\013"]="\226\144\141",["\014"]="\226\144\142",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1810 ["\015"]="\226\144\143",["\016"]="\226\144\144",["\017"]="\226\144\145",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1811 ["\018"]="\226\144\146",["\019"]="\226\144\147",["\020"]="\226\144\148",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1812 ["\021"]="\226\144\149",["\022"]="\226\144\150",["\023"]="\226\144\151",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1813 ["\024"]="\226\144\152",["\025"]="\226\144\153",["\026"]="\226\144\154",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1814 ["\027"]="\226\144\155",["\028"]="\226\144\156",["\029"]="\226\144\157",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1815 ["\030"]="\226\144\158",["\031"]="\226\144\159",["\127"]="\226\144\161",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1816 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1817 local y=pcall(string.format,"%p","");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1818 local function w(h,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1819 local o=e(...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1820 local w=o.n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1821 local a=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1822 h=h:gsub("%%[^cdiouxXaAeEfgGpqs%%]*[cdiouxXaAeEfgGpqs%%]",function(s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1823 if s=="%%"then return end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1824 a=a+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1825 local e=o[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1826 if e==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1827 o[a]="nil";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1828 return"(%s)";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1829 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1830 local t=s:sub(-1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1831 local i=i(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1832 if t=="s"and i=="string"and not e:find("[%z\1-\31\128-\255]")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1833 return
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1834 elseif i=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1835 if t=="g"or(t=="d"and r(e)=="integer")then return end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1836 elseif t=="s"and i~="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1837 e=n(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1838 i="string";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1839 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1840 if t~="s"and t~="q"and t~="p"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1841 if i~="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1842 e=n(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1843 t="s";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1844 s="[%s]";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1845 i="string";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1846 elseif u[t]and r(e)~="integer"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1847 o[a]=n(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1848 return"[%s]";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1849 elseif f[t]and e<0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1850 o[a]=n(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1851 return"[%s]";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1852 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1853 return
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1854 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1855 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1856 if t=="p"and not y then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1857 e=n(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1858 t="s";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1859 s="[%s]";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1860 i="string";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1861 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1862 if i=="string"and t~="p"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1863 if not c(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1864 t="q";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1865 elseif t~="q"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1866 o[a]=e:gsub("[%z\1-\8\11-\31\127]",d):gsub("\n\t?","\n\t");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1867 return s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1868 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1869 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1870 if t=="q"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1871 o[a]=l(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1872 return"%s";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1873 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1874 if t=="p"and(i=="boolean"or i=="number")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1875 o[a]=n(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1876 return"[%s]";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1877 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1878 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1879 while a<w do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1880 a=a+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1881 local e=o[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1882 if e==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1883 o[a]="(nil)";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1884 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1885 o[a]=n(e):gsub("[%z\1-\8\11-\31\127]",d):gsub("\n\t?","\n\t");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1886 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1887 h=h.." [%s]"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1888 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1889 return h:format(m(o));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1890 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1891 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1892 format=w;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1893 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1894 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1895 package.preload['util.promise']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1896 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1897 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1898 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1899 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1900 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1901 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1902 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1903 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1904 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1905 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1906 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1907 local o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1908 local a={__name="promise",__index=o};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1909 local n=require"util.xpcall".xpcall;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1910 local l=table.unpack;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1911 function a:__tostring()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1912 return"promise ("..(self._state or"invalid")..")";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1913 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1914 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1915 local e=getmetatable(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1916 return e==a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1917 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1918 local function e(e,t,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1919 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1920 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1921 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1922 return function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1923 local a,e=n(e,debug.traceback,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1924 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1925 t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1926 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1927 o(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1928 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1929 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1930 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1931 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1932 local function u(o,i,n,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1933 table.insert(o._pending_on_fulfilled,e(i,a,t,a));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1934 table.insert(o._pending_on_rejected,e(n,a,t,t));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1935 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1936 local function r(a,o,n,t,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1937 e(o,t,i,t)(a.value);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1938 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1939 local function d(i,n,o,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1940 e(o,a,t,t)(i.reason);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1941 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1942 local function h(e,i,o,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1943 if e._state~="pending"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1944 return;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1945 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1946 e._state=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1947 e._next=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1948 for o,t in ipairs(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1949 t(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1950 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1951 e._pending_on_fulfilled=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1952 e._pending_on_rejected=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1953 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1954 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1955 local function s(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1956 local function a(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1957 if i(t)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1958 t:next(s(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1959 elseif h(e,"fulfilled",r,e._pending_on_fulfilled,t)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1960 e.value=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1961 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1962 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1963 local function o(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1964 if h(e,"rejected",d,e._pending_on_rejected,t)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1965 e.reason=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1966 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1967 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1968 return a,o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1969 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1970 local d=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1971 e();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1972 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1973 local function e(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1974 local e=setmetatable({_state="pending",_next=u,_pending_on_fulfilled={},_pending_on_rejected={}},a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1975 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1976 d(function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1977 local a,t=s(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1978 local o,a=n(o,debug.traceback,a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1979 if not o and e._state=="pending"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1980 t(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1981 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1982 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1983 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1984 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1985 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1986 local function r(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1987 return e(function(n,r)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1988 local e,a,s=0,{},false;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1989 local t=0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1990 for h,o in pairs(o)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1991 if i(o)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1992 t=t+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1993 o:next(function(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1994 a[h]=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1995 e=e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1996 if e==t and s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1997 n(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1998 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
1999 end,r);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2000 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2001 a[h]=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2002 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2003 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2004 s=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2005 if e==t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2006 n(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2007 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2008 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2009 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2010 local function u(n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2011 return e(function(h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2012 local e,t,o=0,{},false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2013 local a=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2014 for s,n in pairs(n)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2015 if i(n)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2016 a=a+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2017 n:next(function(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2018 t[s]={status="fulfilled",value=i};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2019 e=e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2020 if e==a and o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2021 h(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2022 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2023 end,function(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2024 t[s]={status="rejected",reason=i};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2025 e=e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2026 if e==a and o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2027 h(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2028 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2029 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2030 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2031 t[s]=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2032 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2033 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2034 o=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2035 if e==a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2036 h(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2037 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2038 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2039 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2040 local function n(e,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2041 local t,a={...},select("#",...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2042 return r(t):next(function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2043 return e(l(t,1,a));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2044 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2045 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2046 local function s(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2047 return e(function(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2048 for o=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2049 t[o]:next(e,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2050 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2051 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2052 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2053 local function t(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2054 return e(function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2055 e(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2056 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2057 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2058 local function a(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2059 return e(function(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2060 e(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2061 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2062 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2063 local function h(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2064 return t():next(function()return e();end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2065 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2066 function o:next(o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2067 return e(function(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2068 self:_next(o,a,e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2069 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2070 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2071 function o:catch(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2072 return self:next(nil,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2073 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2074 function o:finally(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2075 local function t(t)e();return t;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2076 local function o(t)e();return a(t);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2077 return self:next(t,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2078 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2079 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2080 new=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2081 resolve=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2082 join=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2083 reject=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2084 all=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2085 all_settled=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2086 race=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2087 try=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2088 is_promise=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2089 set_nexttick=function(e)d=e;end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2090 }
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2091 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2092 package.preload['net.adns']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2093 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2094 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2095 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
2096 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2097 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2098 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2099 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2100 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2101 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2102 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2103 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2104 local o=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2105 local c=tostring;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2106 local k=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2107 local n=string.format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2108 local q=string.lower;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2109 local d=string.upper;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2110 local i=function()end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2111 local w=require"util.logger";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2112 local l=w.init("unbound");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2113 local p=require"net.server";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2114 local m=require"lunbound";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2115 local g=require"util.promise";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2116 local b=require"util.id".short;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2117 local y=require"socket".gettime;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2118 local e=require"util.dns";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2119 local h,s,u=e.classes,e.types,e.errors;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2120 local v=e.parsers;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2121 local t={hoststxt=false}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2122 local function r(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2123 e=e or{};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2124 for t,a in pairs(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2125 if e[t]==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2126 e[t]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2127 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2128 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2129 for t,a in pairs(m.config)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2130 if e[t]==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2131 e[t]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2132 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2133 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2134 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2135 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2136 local a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2137 if prosody then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2138 local e=require"core.configmanager";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2139 a=r(e.get("*","unbound"));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2140 prosody.events.add_handler("config-reloaded",function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2141 a=r(e.get("*","unbound"));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2142 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2143 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2144 local function r(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2145 l("debug","Setting up net.server event handling for %s",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2146 return t.watchfd(e,function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2147 l("debug","Processing queries for %s",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2148 e:process()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2149 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2150 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2151 local t,f;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2152 local function l()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2153 t=m.new(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2154 f=r(t,p);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2155 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2156 if prosody then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2157 prosody.events.add_handler("server-started",l);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2158 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2159 local n={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2160 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2161 if e._string then return e._string end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2162 local t=n("Status: %s",u[e.status]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2163 if e.secure then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2164 t=t..", Secure";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2165 elseif e.bogus then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2166 t=t..n(", Bogus: %s",e.bogus);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2167 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2168 local t={t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2169 for a=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2170 t[a+1]=e.qname.."\t"..h[e.qclass].."\t"..s[e.qtype].."\t"..c(e[a]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2171 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2172 local t=k(t,"\n");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2173 e._string=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2174 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2175 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2176 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2177 local r={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2178 local function p(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2179 if not e then return end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2180 local a=u[e.rcode];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2181 local i=h[e.qclass];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2182 local t=s[e.qtype];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2183 e.status,e.class,e.type=a,i,t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2184 local a=q(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2185 local i={__index=e,__tostring=function(e)return c(e[a])end};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2186 local s=v[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2187 for t=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2188 if e.bogus then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2189 e[t]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2190 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2191 e[t]=o({[a]=s(e[t])},i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2192 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2193 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2194 return o(e,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2195 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2196 local function m(m,u,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2197 if not t then l();end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2198 o=o and d(o)or"A";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2199 a=a and d(a)or"IN";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2200 local l,h=s[o],h[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2201 local d=y();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2202 local n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2203 local i=w.init("unbound.query"..b());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2204 local function s(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2205 local s=y();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2206 r[n]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2207 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2208 p(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2209 i("debug","Results for %s %s %s: %s (%s, %f sec)",u,a,o,e.rcode==0 and(#e.." items")or e.status,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2210 e.secure and"Secure"or e.bogus or"Insecure",s-d);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2211 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2212 i("error","Results for %s %s %s: %s",u,a,o,c(t));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2213 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2214 local t,e=pcall(m,e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2215 if not t then i("error","Error in callback: %s",e);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2216 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2217 i("debug","Resolve %s %s %s",u,a,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2218 local e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2219 n,e=t:resolve_async(s,u,l,h);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2220 if n then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2221 r[n]=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2222 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2223 i("error","Resolver error: %s",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2224 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2225 return n,e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2226 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2227 local function o(o,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2228 if not t then l();end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2229 a=a and d(a)or"A";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2230 e=e and d(e)or"IN";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2231 local e,a=s[a],h[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2232 local e,t=t:resolve(o,e,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2233 if not e then return e,t;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2234 return p(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2235 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2236 local function e(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2237 local a=r[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2238 t:cancel(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2239 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2240 a(nil,"canceled");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2241 r[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2242 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2243 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2244 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2245 local function t()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2246 for t in pairs(r)do e(t);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2247 if f then f:close();end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2248 l();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2249 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2250 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2251 local function a()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2252 error"not implemented";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2253 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2254 local a={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2255 lookup=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2256 cancel=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2257 new_async_socket=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2258 dns={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2259 lookup=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2260 cancel=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2261 cache=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2262 socket_wrapper_set=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2263 settimeout=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2264 query=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2265 purge=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2266 random=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2267 peek=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2268 types=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2269 classes=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2270 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2271 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2272 local function n(e,i,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2273 return g.new(function(n,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2274 local function s(a,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2275 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2276 return t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2277 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2278 return n(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2279 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2280 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2281 local e,a=m(s,i,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2282 if not e then t(a);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2283 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2284 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2285 local e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2286 lookup=function(i,e,t,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2287 return m(e,t,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2288 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2289 lookup_promise=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2290 _resolver={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2291 settimeout=function()end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2292 closeall=function()end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2293 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2294 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2295 function a.resolver()return e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2296 return a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2297 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2298 package.preload['util.dns']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2299 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2300 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2301 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
2302 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2303 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2304 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2305 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2306 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2307 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2308 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2309 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2310 local t=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2311 local e=table;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2312 local s=e.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2313 local n=e.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2314 local o=string.byte;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2315 local i=string.format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2316 local r=string.sub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2317 local h=require"util.dnsregistry";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2318 local c=require"util.hex".encode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2319 local d=require"util.net".ntop;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2320 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2321 local function a(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2322 if o(a,t)==0 then return".",t+1;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2323 local d,h,i=#a,{};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2324 t=t or 1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2325 repeat
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2326 i=o(a,t)or 0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2327 n(h,r(a,t+1,t+i));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2328 t=t+i+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2329 until i==0 or t>=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2330 return s(h,"."),t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2331 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2332 e.CNAME=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2333 e.NS=a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2334 e.PTR=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2335 local x={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2336 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2337 return i("%s %s %d %d %d %d %d",e.mname,e.rname,e.serial,e.refresh,e.retry,e.expire,e.minimum);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2338 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2339 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2340 function e.SOA(n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2341 local s,h,i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2342 s,i=a(n,1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2343 h,i=a(n,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2344 local
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2345 j,q,g,k,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2346 b,l,r,d,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2347 n,a,o,i,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2348 u,w,c,p,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2349 v,y,m,f
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2350 =o(n,i,i+19);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2351 return t({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2352 mname=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2353 rname=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2354 serial=j*16777216+q*65536+g*256+k;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2355 refresh=b*16777216+l*65536+r*256+d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2356 retry=n*16777216+a*65536+o*256+i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2357 expire=u*16777216+w*65536+c*256+p;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2358 minimum=v*16777216+y*65536+m*256+f;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2359 },x);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2360 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2361 e.A=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2362 e.AAAA=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2363 local d={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2364 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2365 return i("%d %s",e.pref,e.mx)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2366 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2367 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2368 function e.MX(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2369 local i=a(e,3);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2370 local a,e=o(e,1,2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2371 return t({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2372 pref=a*256+e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2373 mx=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2374 },d);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2375 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2376 local d={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2377 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2378 return i("%d %d %d %s",e.priority,e.weight,e.port,e.target);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2379 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2380 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2381 function e.SRV(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2382 local i=a(e,7);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2383 local e,a,o,n,h,s=o(e,1,6);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2384 return t({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2385 priority=e*256+a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2386 weight=o*256+n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2387 port=h*256+s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2388 target=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2389 },d);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2390 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2391 local d={__tostring=s};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2392 function e.TXT(s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2393 local l=#s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2394 local h,a,i={},1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2395 repeat
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2396 i=o(s,a)or 0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2397 n(h,r(s,a+1,a+i));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2398 a=a+i+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2399 until a>=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2400 return t(h,d);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2401 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2402 e.SPF=e.TXT;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2403 local d={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2404 [0]="PKIX-CA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2405 [1]="PKIX-EE";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2406 [2]="DANE-TA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2407 [3]="DANE-EE";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2408 [255]="PrivCert";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2409 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2410 local u={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2411 [0]="Cert",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2412 [1]="SPKI",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2413 [255]="PrivSel",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2414 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2415 local l={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2416 [0]="Full",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2417 [1]="SHA2-256",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2418 [2]="SHA2-512",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2419 [255]="PrivMatch",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2420 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2421 local m={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2422 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2423 return i("%s %s %s %s",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2424 d[e.use]or e.use,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2425 u[e.select]or e.select,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2426 l[e.match]or e.match,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2427 c(e.data));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2428 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2429 __index={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2430 getUsage=function(e)return d[e.use]end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2431 getSelector=function(e)return u[e.select]end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2432 getMatchType=function(e)return l[e.match]end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2433 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2434 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2435 function e.TLSA(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2436 local i,o,a=o(e,1,3);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2437 return t({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2438 use=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2439 select=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2440 match=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2441 data=r(e,4);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2442 },m);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2443 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2444 local o={"alpn";"no-default-alpn";"port";"ipv4hint";"ech";"ipv6hint"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2445 t(o,{__index=function(t,e)return"key"..tostring(e);end});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2446 local m={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2447 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2448 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2449 for a=1,#e.fields do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2450 n(t,i("%s=%q",o[e.fields[a].key],tostring(e.fields[a].value)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2451 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2452 return i("%d %s %s",e.prio,e.name,s(t," "));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2453 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2454 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2455 local r={__tostring=function(e)return s(e,", ");end}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2456 function e.SVCB(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2457 local o,s=i:byte(1,2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2458 local u=o*256+s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2459 local l,o=a(i,3);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2460 local d={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2461 while#i>o do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2462 local s,l=i:byte(o+0,o+1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2463 local h,a=i:byte(o+2,o+3);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2464 local s=s*256+l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2465 local h=h*256+a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2466 local a=i:sub(o+4,o+4-1+h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2467 if s==1 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2468 a=t(e.TXT(a),r);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2469 elseif s==3 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2470 local e,t=a:byte(1,2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2471 local e=e*256+t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2472 a=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2473 elseif s==4 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2474 local o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2475 for t=1,#a,4 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2476 n(o,e.A(a:sub(t,t+3)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2477 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2478 a=t(o,r);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2479 elseif s==6 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2480 local o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2481 for t=1,#a,16 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2482 n(o,e.AAAA(a:sub(t,t+15)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2483 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2484 a=t(o,r);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2485 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2486 n(d,{key=s,value=a,len=h});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2487 o=o+h+4;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2488 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2489 return t({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2490 prio=u,name=l,fields=d,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2491 },m);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2492 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2493 e.HTTPS=e.SVCB;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2494 local o={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2495 TLSA={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2496 use=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2497 select=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2498 match=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2499 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2500 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2501 local a={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2502 __tostring=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2503 return i([[\# %d %s]],#e.raw,c(e.raw));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2504 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2505 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2506 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2507 return t({raw=e},a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2508 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2509 t(e,{__index=function()return i end});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2510 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2511 parsers=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2512 classes=h.classes;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2513 types=h.types;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2514 errors=h.errors;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2515 params=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2516 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2517 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2518 package.preload['net.server']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2519 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2520 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2521 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
2522 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2523 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2524 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2525 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2526 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2527 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2528 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2529 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2530 local f=function(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2531 return _G[e]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2532 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2533 local V,e=require("util.logger").init("socket"),table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2534 local n=function(...)return V("debug",e{...});end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2535 local j=function(...)return V("warn",e{...});end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2536 local ie=1
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2537 local w=f"type"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2538 local q=f"pairs"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2539 local oe=f"ipairs"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2540 local b=f"tonumber"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2541 local u=f"tostring"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2542 local t=f"table"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2543 local a=f"string"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2544 local e=f"coroutine"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2545 local W=math.min
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2546 local te=math.huge
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2547 local ye=t.concat
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2548 local ae=t.insert
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2549 local be=a.sub
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2550 local pe=e.wrap
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2551 local ke=e.yield
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2552 local x=f"socket"or require"socket"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2553 local P=x.gettime
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2554 local e=require"util.net";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2555 local ge=e.pton;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2556 local ve=require"util.sslconfig";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2557 local Y,fe=pcall(require,"net.tls_luasec");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2558 local ue=x.bind
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2559 local we=x.select
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2560 local U
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2561 local Z
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2562 local ce
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2563 local me
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2564 local ee
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2565 local l
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2566 local de
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2567 local J
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2568 local K
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2569 local le
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2570 local re
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2571 local ne
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2572 local Q
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2573 local h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2574 local se
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2575 local G
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2576 local he
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2577 local p
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2578 local i
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2579 local F
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2580 local r
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2581 local s
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2582 local R
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2583 local v
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2584 local y
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2585 local k
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2586 local T
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2587 local a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2588 local o
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2589 local g
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2590 local C
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2591 local M
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2592 local D
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2593 local _
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2594 local H
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2595 local B
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2596 local d
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2597 local S
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2598 local I
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2599 local O
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2600 local N
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2601 local L
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2602 local z
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2603 local E
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2604 local A
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2605 p={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2606 i={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2607 r={}
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2608 F={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2609 s={}
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2610 v={}
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2611 y={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2612 R={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2613 k={}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2614 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2615 o=0
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2616 g=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2617 C=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2618 M=0
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2619 D=1
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2620 _=128
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2621 H=10
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2622 S=51e3*1024
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2623 I=25e3*1024
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2624 O=30
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2625 N=6e4
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2626 L=14*60
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2627 local e=package.config:sub(1,1)=="\\"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2628 E=(e and math.huge)or x._SETSIZE or 1024
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2629 z=x._SETSIZE or 1024
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2630 A=30
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2631 re=function(w,t,m,c,q,y,v)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2632 if t:getfd()>=E then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2633 j("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
2634 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2635 return nil,"fd-too-large"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2636 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2637 local f=0
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2638 local b,e=w.onconnect,w.ondisconnect
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2639 local g=t.accept
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2640 local e={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2641 e.shutdown=function()end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2642 e.ssl=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2643 return y~=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2644 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2645 e.sslctx=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2646 return y
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2647 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2648 e.hosts={}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2649 e.remove=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2650 f=f-1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2651 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2652 e.resume()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2653 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2654 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2655 e.close=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2656 t:close()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2657 o=h(r,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2658 a=h(i,t,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2659 p[m..":"..c]=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2660 s[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2661 e=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2662 t=nil
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2663 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
2664 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2665 e.pause=function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2666 if not e.paused then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2667 a=h(i,t,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2668 if o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2669 s[t]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2670 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2671 t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2672 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2673 e.paused=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2674 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
2675 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2676 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2677 e.resume=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2678 if e.paused then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2679 if not t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2680 t=ue(m,c,_);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2681 t:settimeout(0)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2682 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2683 a=l(i,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2684 s[t]=e
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2685 k[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2686 e.paused=false;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2687 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
2688 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2689 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2690 e.ip=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2691 return m
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2692 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2693 e.serverport=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2694 return c
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2695 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2696 e.socket=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2697 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2698 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2699 e.readbuffer=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2700 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
2701 e.pause()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2702 k[e]=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2703 n("server.lua: refused new client connection: server full")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2704 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2705 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2706 local t,o=g(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2707 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2708 local a,o=t:getpeername()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2709 local e,i,t=G(e,w,t,a,c,o,q,y,v)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2710 if t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2711 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2712 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2713 f=f+1
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2714 n("server.lua: accepted new client connection from ",u(a),":",u(o)," to ",u(c))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2715 if b and not v then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2716 return b(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2717 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2718 return;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2719 elseif o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2720 n("server.lua: error with new client connection: ",u(o))
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2721 e.pause()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2722 k[e]=d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2723 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2724 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2725 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2726 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2727 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2728 G=function(q,c,t,H,ee,L,D,w,te,P)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2729 if t:getfd()>=E then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2730 j("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
2731 t:close()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2732 if q then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2733 k[q]=d
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2734 q.pause()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2735 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2736 return nil,nil,"fd-too-large"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2737 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2738 t:settimeout(0)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2739 local b
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2740 local N
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2741 local z
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2742 local B
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2743 local x
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2744 local K=c.onincoming
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2745 local G=c.onstatus
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2746 local k=c.ondisconnect
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2747 local J=c.onpredrain
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2748 local X=c.ondrain
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2749 local ae=c.onreadtimeout;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2750 local Q=c.ondetach
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2751 local g={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2752 local m=0
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2753 local Z
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2754 local V
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2755 local f=0
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2756 local p=false
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2757 local E=false
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2758 local W,F=0,0
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2759 local _=S
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2760 local O=I
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2761 local e=g
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2762 e.extra=P
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2763 if P then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2764 e.servername=P.servername
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2765 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2766 e.dispatch=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2767 return K
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2768 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2769 e.disconnect=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2770 return k
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2771 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2772 e.onreadtimeout=ae;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2773 e.setlistener=function(a,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2774 if Q then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2775 Q(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2776 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2777 K=t.onincoming
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2778 k=t.ondisconnect
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2779 G=t.onstatus
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2780 J=t.onpredrain
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2781 X=t.ondrain
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2782 e.onreadtimeout=t.onreadtimeout
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2783 Q=t.ondetach
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2784 if t.onattach then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2785 t.onattach(a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2786 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2787 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2788 e._setpending=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2789 x=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2790 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2791 e.getstats=function()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2792 return F,W
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2793 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2794 e.ssl=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2795 return B
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2796 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2797 e.sslctx=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2798 return w
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2799 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2800 e.ssl_info=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2801 return t.info and t:info()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2802 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2803 e.ssl_peercertificate=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2804 if not t.getpeercertificate then return nil,"not-implemented";end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2805 return t:getpeercertificate()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2806 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2807 e.ssl_peerverification=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2808 if not t.getpeerverification then return nil,{{"Chain verification not supported"}};end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2809 return t:getpeerverification();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2810 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2811 e.ssl_peerfinished=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2812 if not t.getpeerfinished then return nil,"not-implemented";end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2813 return t:getpeerfinished();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2814 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2815 e.send=function(n,i,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2816 return b(t,i,a,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2817 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2818 e.receive=function(o,a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2819 return N(t,o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2820 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2821 e.shutdown=function(a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2822 return z(t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2823 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2824 e.setoption=function(i,o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2825 if t.setoption then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2826 return t:setoption(o,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2827 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2828 return false,"setoption not implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2829 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2830 e.force_close=function(t,a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2831 if m~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2832 n("server.lua: discarding unwritten data for ",u(H),":",u(L))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2833 m=0;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2834 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2835 return t:close(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2836 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2837 e.close=function(l,d)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2838 if not e then return true;end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2839 a=h(i,t,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2840 v[e]=nil
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2841 if m~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2842 e:sendbuffer()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2843 if m~=0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2844 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2845 e.write=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2846 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2847 Z=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2848 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2849 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2850 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2851 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2852 T=z and z(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2853 t:close()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2854 o=h(r,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2855 s[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2856 t=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2857 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2858 n"server.lua: socket already closed"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2859 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2860 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2861 y[e]=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2862 R[e]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2863 local t=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2864 e=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2865 if k then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2866 k(t,d or false);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2867 k=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2868 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2869 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2870 if q then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2871 q.remove()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2872 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2873 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
2874 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2875 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2876 e.server=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2877 return q
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2878 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2879 e.ip=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2880 return H
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2881 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2882 e.serverport=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2883 return ee
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2884 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2885 e.clientport=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2886 return L
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2887 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2888 e.port=e.clientport
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2889 local k=function(i,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2890 if not e then return false end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2891 f=f+#a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2892 if f>_ then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2893 R[e]="send buffer exceeded"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2894 return false
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2895 elseif not E and t and not r[t]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2896 o=l(r,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2897 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2898 m=m+1
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2899 g[m]=a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2900 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2901 y[e]=y[e]or d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2902 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2903 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2904 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2905 e.write=k
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2906 e.bufferqueue=function(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2907 return g
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2908 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2909 e.socket=function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2910 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2911 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2912 e.set_mode=function(a,t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2913 D=t or D
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2914 return D
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2915 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2916 e.set_send=function(a,t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2917 b=t or b
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2918 return b
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2919 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2920 e.bufferlen=function(o,a,t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2921 _=t or _
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2922 O=a or O
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2923 return f,O,_
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2924 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2925 e.lock_read=function(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2926 j("server.lua, lock_read() is deprecated, use pause() and resume()")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2927 if t==true then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2928 return a:pause()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2929 elseif t==false then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2930 return a:resume()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2931 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2932 return p
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2933 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2934 e.pause=function(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2935 local o=a
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2936 a=h(i,t,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2937 v[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2938 if a~=o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2939 p=true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2940 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2941 return p;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2942 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2943 e.resume=function(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2944 if p then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2945 p=false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2946 a=l(i,t,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2947 v[e]=d
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2948 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2949 return p;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2950 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2951 e.lock=function(t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2952 j("server.lua, lock() is deprecated")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2953 e.lock_read(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2954 if a==true then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2955 e.pause_writes(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2956 elseif a==false then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2957 e.resume_writes(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2958 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2959 return p,E
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2960 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2961 e.pause_writes=function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2962 local a=o
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2963 o=h(r,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2964 y[e]=nil
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2965 E=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2966 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2967 e.resume_writes=function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2968 E=false
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2969 if f>0 and t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2970 o=l(r,t,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2971 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2972 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2973 local v=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2974 local o,t,a=N(t,D)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2975 if not t or(t=="wantread"or t=="timeout")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2976 local a=o or a or""
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2977 local o=#a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2978 if o>O then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2979 e:close("receive buffer exceeded")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2980 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2981 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2982 local o=o*ie
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2983 F=F+o
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2984 M=M+o
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2985 v[e]=d
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2986 if x then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2987 x=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2988 if c.onconnect then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2989 c.onconnect(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2990 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2991 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2992 return K(e,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2993 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2994 n("server.lua: client ",u(H),":",u(L)," read error: ",u(t))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2995 T=e and e:force_close(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2996 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2997 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2998 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
2999 local p=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3000 local w,a,i,s,l;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3001 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3002 if x then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3003 x=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3004 if c.onconnect then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3005 c.onconnect(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3006 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3007 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3008 if J then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3009 J(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3010 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3011 s=ye(g,"",1,m)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3012 w,a,i=b(t,s,1,f)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3013 l=(w or i or 0)*ie
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3014 W=W+l
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3015 C=C+l
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3016 for e=m,1,-1 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3017 g[e]=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3018 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3019 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3020 w,a,l=false,"unexpected close",0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3021 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3022 if w then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3023 m=0
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3024 f=0
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3025 o=h(r,t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3026 y[e]=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3027 if X then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3028 X(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3029 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3030 T=V and e:starttls(nil)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3031 T=Z and e:force_close()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3032 return true
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3033 elseif i and(a=="timeout"or a=="wantwrite")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3034 s=be(s,i+1,f)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3035 g[1]=s
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3036 m=1
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3037 f=f-i
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3038 y[e]=d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3039 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3040 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3041 n("server.lua: client ",u(H),":",u(L)," write error: ",u(a))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3042 T=e and e:force_close(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3043 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3044 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3045 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3046 local d;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3047 function e.set_sslctx(y,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3048 w=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3049 local u,f
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3050 d=pe(function(s)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3051 local t
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3052 for d=1,A do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3053 o=(f and h(r,s,o))or o
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3054 a=(u and h(i,s,a))or a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3055 u,f=nil,nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3056 d,t=s:dohandshake()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3057 if not t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3058 n("server.lua: ssl handshake done")
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3059 e.readbuffer=v
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3060 e.sendbuffer=p
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3061 d=G and G(e,"ssl-handshake-complete")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3062 if y.autostart_ssl and c.onconnect then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3063 c.onconnect(y);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3064 if m~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3065 o=l(r,s,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3066 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3067 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3068 a=l(i,s,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3069 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3070 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3071 if t=="wantwrite"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3072 o=l(r,s,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3073 f=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3074 elseif t=="wantread"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3075 a=l(i,s,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3076 u=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3077 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3078 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3079 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3080 t=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3081 ke()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3082 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3083 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3084 t=(t or"handshake too long");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3085 n("server.lua: ",t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3086 T=e and e:force_close(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3087 return false,t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3088 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3089 )
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3090 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3091 if Y then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3092 e.starttls=function(f,c)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3093 if c then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3094 e:set_sslctx(c);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3095 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3096 if m>0 then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3097 n"server.lua: we need to do tls, but delaying until send buffer empty"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3098 V=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3099 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3100 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3101 n("server.lua: attempting to start tls on "..u(t))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3102 local m,c=t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3103 t,c=w:wrap(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3104 if not t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3105 n("server.lua: error while starting tls on client: ",u(c or"unknown error"))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3106 return nil,c
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3107 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3108 if t.sni then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3109 if f.servername then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3110 t:sni(f.servername);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3111 elseif next(w._sni_contexts)~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3112 t:sni(w._sni_contexts,true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3113 end
12
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 t:settimeout(0)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3116 b=t.send
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3117 N=t.receive
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3118 z=U
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3119 s[t]=e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3120 a=l(i,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3121 a=h(i,m,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3122 o=h(r,m,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3123 s[m]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3124 e.starttls=nil
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3125 V=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3126 B=true
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3127 e.readbuffer=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3128 e.sendbuffer=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3129 return d(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3130 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3131 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3132 e.readbuffer=v
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3133 e.sendbuffer=p
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3134 b=t.send
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3135 N=t.receive
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3136 z=(B and U)or t.shutdown
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3137 s[t]=e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3138 a=l(i,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3139 if w and te and Y then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3140 n"server.lua: auto-starting ssl negotiation..."
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3141 e.autostart_ssl=true;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3142 local t,e=e:starttls(w);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3143 if t==false then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3144 return nil,nil,e
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3145 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3146 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3147 return e,t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3148 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3149 U=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3150 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3151 me=function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3152 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3153 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3154 l=function(a,t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3155 if not a[t]then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3156 e=e+1
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3157 a[e]=t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3158 a[t]=e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3159 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3160 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3161 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3162 h=function(e,i,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3163 local o=e[i]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3164 if o then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3165 e[i]=nil
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3166 local a=e[t]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3167 e[t]=nil
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3168 if a~=i then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3169 e[a]=o
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3170 e[o]=a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3171 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3172 return t-1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3173 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3174 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3175 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3176 Q=function(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3177 o=h(r,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3178 a=h(i,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3179 s[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3180 e:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3181 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3182 local function c(e,t,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3183 local a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3184 local i=t.sendbuffer;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3185 function t.sendbuffer()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3186 i(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3187 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
3188 e:lock_read(false);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3189 a=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3190 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3191 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3192 local i=e.readbuffer;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3193 function e.readbuffer()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3194 i();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3195 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
3196 a=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3197 e:lock_read(true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3198 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3199 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3200 e:set_mode("*a");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3201 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3202 J=function(e,t,d,h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3203 e=e or"*"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3204 h=h or{}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3205 local o
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3206 local r=h.tls_ctx;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3207 local c=h.tls_direct;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3208 local u=h.read_size;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3209 if w(d)~="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3210 o="invalid listener table"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3211 elseif w(e)~="string"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3212 o="invalid address"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3213 elseif w(t)~="number"or not(t>=0 and t<=65535)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3214 o="invalid port"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3215 elseif p[e..":"..t]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3216 o="listeners on '["..e.."]:"..t.."' already exist"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3217 elseif r and not Y then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3218 o="luasec not found"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3219 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3220 if o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3221 j("server.lua, [",e,"]:",t,": ",o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3222 return nil,o
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3223 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3224 local o,h=ue(e,t,_)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3225 if h then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3226 j("server.lua, [",e,"]:",t,": ",h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3227 return nil,h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3228 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3229 local h,d=re(d,o,e,t,u,r,c)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3230 if not h then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3231 o:close()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3232 return nil,d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3233 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3234 o:settimeout(0)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3235 a=l(i,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3236 p[e..":"..t]=h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3237 s[o]=h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3238 n("server.lua: new "..(r and"ssl "or"").."server listener on '[",e,"]:",t,"'")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3239 return h
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3240 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3241 de=function(i,o,t,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3242 return J(i,o,t,{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3243 read_size=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3244 tls_ctx=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3245 tls_direct=e and true or false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3246 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3247 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3248 le=function(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3249 return p[e..":"..t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3250 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3251 se=function(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3252 local a=p[e..":"..t]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3253 if not a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3254 return nil,"no server found on '["..e.."]:"..u(t).."'"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3255 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3256 a:close()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3257 p[e..":"..t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3258 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3259 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3260 ee=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3261 for t,e in q(s)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3262 e:close()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3263 s[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3264 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3265 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3266 o=0
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3267 g=0
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3268 p={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3269 i={}
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3270 r={}
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3271 F={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3272 s={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3273 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3274 ne=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3275 return{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3276 select_timeout=D;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3277 tcp_backlog=_;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3278 max_send_buffer_size=S;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3279 max_receive_buffer_size=I;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3280 select_idle_check_interval=O;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3281 send_timeout=N;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3282 read_timeout=L;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3283 max_connections=z;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3284 max_ssl_handshake_roundtrips=A;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3285 highest_allowed_fd=E;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3286 accept_retry_interval=H;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3287 }
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3288 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3289 he=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3290 if w(e)~="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3291 return nil,"invalid settings table"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3292 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3293 D=b(e.select_timeout)or D
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3294 S=b(e.max_send_buffer_size)or S
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3295 I=b(e.max_receive_buffer_size)or I
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3296 O=b(e.select_idle_check_interval)or O
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3297 _=b(e.tcp_backlog)or _
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3298 N=b(e.send_timeout)or N
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3299 L=b(e.read_timeout)or L
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3300 H=b(e.accept_retry_interval)or H
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3301 z=e.max_connections or z
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3302 A=e.max_ssl_handshake_roundtrips or A
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3303 E=e.highest_allowed_fd or E
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3304 return true
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3305 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3306 K=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3307 if w(e)~="function"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3308 return nil,"invalid listener function"
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3309 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3310 g=g+1
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3311 F[g]=e
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3312 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3313 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3314 local u do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3315 local a={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3316 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3317 function u(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3318 local o=P();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3319 e=e+o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3320 if e>=o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3321 ae(t,{e,a});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3322 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3323 local e=a(o);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3324 if e and w(e)=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3325 return u(e,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3326 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3327 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3328 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3329 K(function(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3330 if#t>0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3331 for o,e in q(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3332 ae(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3333 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3334 t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3335 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3336 local e=te;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3337 for s,t in q(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3338 local n,i=t[1],t[2];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3339 if n<=o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3340 a[s]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3341 local t=i(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3342 if w(t)=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3343 u(t,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3344 e=W(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3345 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3346 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3347 e=W(e,n-o);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3348 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3349 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3350 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3351 end);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3352 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3353 ce=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3354 return M,C,a,o,g
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3355 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3356 local e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3357 local function b(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3358 e=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3359 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3360 Z=function(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3361 if e then return"quitting";end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3362 if t then e="once";end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3363 d=P()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3364 repeat
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3365 local t=te;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3366 for e=1,g do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3367 local e=F[e](d)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3368 if e then t=W(t,e);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3369 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3370 local t,a,o=we(i,r,W(D,t))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3371 for t,e in oe(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3372 local t=s[e]
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3373 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3374 t:readbuffer()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3375 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3376 Q(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3377 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
3378 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3379 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3380 for e,t in oe(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3381 local e=s[t]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3382 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3383 e:sendbuffer()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3384 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3385 Q(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3386 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
3387 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3388 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3389 for e,t in q(R)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3390 e.disconnect()(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3391 e:force_close()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3392 R[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3393 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3394 d=P()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3395 if d-B>O then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3396 B=d
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3397 for e,t in q(y)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3398 if d-t>N then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3399 e.disconnect()(e,"send timeout")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3400 e:force_close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3401 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3402 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3403 for e,t in q(v)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3404 if d-t>L then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3405 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
3406 e.disconnect()(e,"read timeout")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3407 e:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3408 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3409 v[e]=d
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3410 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3411 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3412 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3413 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3414 for e,t in q(k)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3415 if d-t>H then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3416 k[e]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3417 e.resume();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3418 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3419 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3420 until e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3421 if e=="once"then e=nil;return;end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3422 ee();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3423 return"quitting"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3424 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3425 local function p()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3426 return Z(true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3427 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3428 local function m()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3429 return"select";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3430 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3431 local d=function(e,t,h,d,c,n,u)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3432 local t,e,h=G(nil,d,e,t,h,"clientport",c,n,n,u)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3433 if not t then return nil,h end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3434 s[e]=t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3435 if not n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3436 t._setpending()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3437 a=l(i,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3438 o=l(r,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3439 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3440 return t,e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3441 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3442 local g=function(o,t,i,r,n,a,s)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3443 local e
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3444 if w(i)~="table"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3445 e="invalid listener table"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3446 elseif w(o)~="string"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3447 e="invalid address"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3448 elseif w(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
3449 e="invalid port"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3450 elseif n and not Y then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3451 e="luasec not found"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3452 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3453 if not a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3454 local e=ge(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3455 if not e then return nil,"invalid-ip";end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3456 if#e==16 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3457 a="tcp6";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3458 elseif#e==4 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3459 a="tcp4";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3460 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3461 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3462 local a=x[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3463 if w(a)~="function"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3464 e="invalid socket type"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3465 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3466 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3467 j("server.lua, addclient: ",e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3468 return nil,e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3469 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3470 local e,a=a()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3471 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3472 return nil,a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3474 e:settimeout(0)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3475 local h,a=e:setpeername(o,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3476 if h or a=="timeout"or a=="Operation already in progress"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3477 return d(e,o,t,i,r,n,s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3478 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3479 return nil,a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3480 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3481 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3482 local k=function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3483 local e=e.conn;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3484 o=h(r,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3485 a=h(i,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3486 s[e]=nil
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3487 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3488 local i=function(d,n,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3489 local e=d.conn
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3490 s[e]=d
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3491 if n~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3492 if n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3493 a=l(i,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3494 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3495 o=h(r,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3496 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3497 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3498 if t~=nil then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3499 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3500 o=l(r,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3501 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3502 a=h(i,e,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3503 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3504 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3505 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3506 local t=function(e,o,a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3507 local t=e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3508 if w(e)=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3509 t={getfd=function()return e;end}
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3510 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3511 local e={
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3512 conn=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3513 readbuffer=o or U;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3514 sendbuffer=a or U;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3515 close=k;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3516 setflags=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3517 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3518 i(e,o,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3519 return e
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3520 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3521 f"setmetatable"(s,{__mode="k"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3522 f"setmetatable"(v,{__mode="k"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3523 f"setmetatable"(y,{__mode="k"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3524 B=P()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3525 local function a(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3526 local t=V;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3527 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3528 V=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3529 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3530 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3531 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3532 return{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3533 _addtimer=K,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3534 add_task=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3535 addclient=g,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3536 wrapclient=d,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3537 watchfd=t,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3538 loop=Z,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3539 link=c,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3540 step=p,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3541 stats=ce,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3542 closeall=ee,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3543 addserver=de,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3544 listen=J,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3545 getserver=le,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3546 setlogger=a,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3547 getsettings=ne,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3548 setquitting=b,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3549 removeserver=se,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3550 get_backend=m,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3551 changesettings=he,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3552 tls_builder=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3553 return ve._new(fe.new_context,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3554 end,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3555 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3556 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3557 package.preload['util.xmppstream']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3558 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3559 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3560 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
3561 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3562 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3563 (select(t,...))(e);
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 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3566 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3567 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3568 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3569 local e=require"lxp";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3570 local g=require"util.stanza";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3571 local y=g.stanza_mt;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3572 local w=error;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3573 local t=tostring;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3574 local d=table.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3575 local b=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3576 local E=table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3577 local p=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3578 local T=pcall(e.new,{StartDoctypeDecl=false});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3579 local _=pcall(e.new,{XmlDecl=false});
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3580 local a=not not e.new({}).getcurrentbytecount;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3581 local x=1024*1024*1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3582 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3583 local v=e.new;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3584 local j={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3585 ["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
3586 ["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
3587 ["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
3588 ["http://www.w3.org/XML/1998/namespace\1id"]="xml:id";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3589 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3590 local h="http://etherx.jabber.org/streams";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3591 local r="\1";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3592 local k="^([^"..r.."]*)"..r.."?(.*)$";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3593 local function o()end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3594 local function q(n,e,s)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3595 local i={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3596 local g=e.streamopened;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3597 local v=e.streamclosed;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3598 local l=e.error or
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3599 function(o,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3600 w("XML stream error: "..t(a)..(e and": "..t(e)or""),2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3601 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3602 local x=e.handlestanza;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3603 s=s or o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3604 local t=e.stream_ns or h;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3605 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
3606 if t~=""then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3607 m=t..r..m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3608 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3609 local z=t..r..(e.error_tag or"error");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3610 local q=e.default_ns;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3611 local f="en";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3612 local u={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3613 local h,e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3614 local t=0;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3615 local r=0;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3616 function i:StartElement(c,o)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3617 if e and#h>0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3618 d(e,b(h));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3619 h={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3620 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3621 local h,i=c:match(k);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3622 if i==""then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3623 h,i="",h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3624 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3625 if h~=q or r>0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3626 o.xmlns=h;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3627 r=r+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3628 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3629 for t=1,#o do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3630 local e=o[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3631 o[t]=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3632 local t=j[e];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3633 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3634 o[t]=o[e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3635 o[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3636 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3637 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3638 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3639 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3640 t=self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3641 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3642 if n.notopen then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3643 if c==m then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3644 r=0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3645 f=o["xml:lang"]or f;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3646 if g then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3647 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3648 s(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3649 t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3650 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3651 g(n,o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3652 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3653 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3654 l(n,"no-stream",c);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3655 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3656 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3657 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3658 if h=="jabber:client"and i~="iq"and i~="presence"and i~="message"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3659 l(n,"invalid-top-level-element");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3660 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3661 e=p({name=i,attr=o,tags={}},y);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3662 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3663 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3664 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3665 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3666 d(u,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3667 local t=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3668 e=p({name=i,attr=o,tags={}},y);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3669 d(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3670 d(t.tags,e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3671 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3672 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3673 function i:StartCdataSection()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3674 if a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3675 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3676 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3677 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3678 s(self:getcurrentbytecount());
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3679 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3680 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3681 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3682 function i:EndCdataSection()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3683 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3684 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3685 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3686 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3687 s(self:getcurrentbytecount());
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3688 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3689 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3690 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3691 function i:CharacterData(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3692 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3693 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3694 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3695 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3696 d(h,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3697 elseif a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3698 s(self:getcurrentbytecount());
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3699 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3700 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3701 function i:EndElement(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3702 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3703 t=t+self:getcurrentbytecount()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3704 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3705 if r>0 then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3706 r=r-1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3707 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3708 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3709 if#h>0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3710 d(e,b(h));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3711 h={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3712 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3713 if#u==0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3714 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3715 s(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3716 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3717 t=0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3718 if e.attr["xml:lang"]==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3719 e.attr["xml:lang"]=f;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3720 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3721 if o~=z then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3722 x(n,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3723 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3724 l(n,"stream-error",e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3725 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3726 e=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3727 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3728 e=E(u);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3729 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3730 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3731 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3732 s(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3733 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3734 if v then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3735 v(n);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3736 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3737 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3738 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3739 local function o(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3740 l(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
3741 if not e.stop or not e:stop()then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3742 w("Failed to abort parsing");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3743 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3744 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3745 if _ then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3746 function i:XmlDecl(e,t,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3747 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3748 s(self:getcurrentbytecount());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3749 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3750 if(t and t:lower()~="utf-8")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3751 or(i=="no")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3752 or(e and e~="1.0")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3753 return o(self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3754 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3755 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3756 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3757 if T then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3758 i.StartDoctypeDecl=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3759 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3760 i.Comment=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3761 i.ProcessingInstruction=o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3762 local function a()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3763 e,h,t=nil,{},0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3764 u={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3765 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3766 local function e(t,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3767 n=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3768 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3769 return i,{reset=a,set_session=e};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3770 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3771 local function l(e,h,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3772 local t=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3773 local i;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3774 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3775 function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3776 t=t-e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3777 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3778 o=o or x;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3779 elseif o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3780 w("Stanza size limits are not supported on this version of LuaExpat")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3781 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3782 local n,d=q(e,h,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3783 local i=v(n,r,false);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3784 local s=i.parse;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3785 function e.open_stream(e,o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3786 local i=e.sends2s or e.send;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3787 local t={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3788 ["xmlns:stream"]="http://etherx.jabber.org/streams",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3789 ["xml:lang"]="en",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3790 xmlns=h.default_ns,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3791 version=e.version and(e.version>0 and"1.0"or nil),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3792 id=e.streamid or"",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3793 from=o or e.host,to=a,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3794 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3795 if e.stream_attrs then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3796 e:stream_attrs(o,a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3797 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3798 i("<?xml version='1.0'?>"..g.stanza("stream:stream",t):top_tag());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3799 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3800 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3801 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3802 reset=function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3803 i=v(n,r,false);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3804 s=i.parse;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3805 t=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3806 d.reset();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3807 end,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3808 feed=function(e,n)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3809 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3810 t=t+#n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3811 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3812 local e=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3813 local n,s=s(e,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3814 if a and t>o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3815 return nil,"stanza-too-large";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3816 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3817 if i~=e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3818 e:parse();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3819 e:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3820 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3821 return n,s;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3822 end,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3823 set_session=d.set_session;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3824 set_stanza_size_limit=function(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3825 o=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3826 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3827 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3828 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3829 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3830 ns_separator=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3831 ns_pattern=k;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3832 new_sax_handlers=q;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3833 new=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3834 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3835 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3836 package.preload['util.jid']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3837 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3838 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3839 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
3840 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3841 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3842 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3843 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3844 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3845 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3846 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3847 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3848 local i=select;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3849 local a,h=string.match,string.sub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3850 local u=require"util.encodings".stringprep.nodeprep;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3851 local l=require"util.encodings".stringprep.nameprep;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3852 local d=require"util.encodings".stringprep.resourceprep;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3853 local o={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3854 [" "]="\\20";['"']="\\22";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3855 ["&"]="\\26";["'"]="\\27";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3856 ["/"]="\\2f";[":"]="\\3a";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3857 ["<"]="\\3c";[">"]="\\3e";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3858 ["@"]="\\40";["\\"]="\\5c";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3859 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3860 local n={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3861 local s={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3862 for t,e in pairs(o)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3863 n[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3864 s[e]=e:gsub("\\",o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3865 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3866 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3867 local function t(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3868 if e==nil then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3869 local i,t=a(e,"^([^@/]+)@()");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3870 local t,o=a(e,"^([^@/]+)()",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3871 local a=t and a(e,"^/(.+)$",o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3872 if(t==nil)or((a==nil)and#e>=o)then return nil,nil,nil;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3873 return i,t,a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3874 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3875 local function m(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3876 local t,e=t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3877 if t~=nil and e~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3878 return t.."@"..e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3879 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3880 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3881 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3882 local function r(e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3883 local a,e,t=t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3884 if e~=nil and e~="."then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3885 if h(e,-1,-1)=="."then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3886 e=h(e,1,-2);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3887 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3888 e=l(e,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3889 if e==nil then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3890 if a~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3891 a=u(a,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3892 if a==nil then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3893 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3894 if t~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3895 t=d(t,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3896 if t==nil then return;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3897 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3898 return a,e,t;
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
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3901 local function h(t,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3902 if e==nil then return end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3903 if t~=nil and a~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3904 return t.."@"..e.."/"..a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3905 elseif t~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3906 return t.."@"..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3907 elseif a~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3908 return e.."/"..a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3909 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3910 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3911 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3912 local function c(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3913 local e,a,t=r(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3914 return h(e,a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3915 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3916 local function f(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3917 local i,n,o=t(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3918 local a,t,e=t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3919 if(a==nil or a==i)and
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3920 (t==nil or t==n)and
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3921 (e==nil or e==o)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3922 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3923 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3924 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3925 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3926 local function u(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3927 return(i(1,t(e)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3928 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3929 local function l(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3930 return(i(2,t(e)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3931 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3932 local function d(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3933 return(i(3,t(e)));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3934 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3935 local function a(e)return e and(e:gsub("\\%x%x",s):gsub("[\"&'/:<>@ ]",o));end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3936 local function o(e)return e and(e:gsub("\\%x%x",n));end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3937 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3938 split=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3939 bare=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3940 prepped_split=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3941 join=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3942 prep=c;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3943 compare=f;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3944 node=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3945 host=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3946 resource=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3947 escape=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3948 unescape=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3949 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3950 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3951 package.preload['util.events']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3952 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3953 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3954 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
3955 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3956 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3957 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3958 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3959 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3960 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3961 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3962 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3963 local a=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3964 local d=table.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3965 local w=table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3966 local u=table.sort;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3967 local l=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3968 local h=next;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3969 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3970 local function f()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3971 local o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3972 local t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3973 local n={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3974 local i={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3975 local s=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3976 local function r(n,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3977 local e=i[o];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3978 if not e or h(e)==nil then return;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3979 local t={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3980 for e in a(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3981 d(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3982 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3983 u(t,function(a,t)return e[a]>e[t];end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3984 n[o]=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3985 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3986 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3987 l(o,{__index=r});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3988 local function l(t,n,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3989 local e=i[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3990 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3991 e[n]=a or 0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3992 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3993 e={[n]=a or 0};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3994 i[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3995 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3996 o[t]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3997 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3998 local function d(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
3999 local t=i[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4000 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4001 t[a]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4002 o[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4003 if h(t)==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4004 i[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4006 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4007 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4008 local function c(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4009 return o[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4010 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4011 local function u(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4012 for e,t in a(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4013 l(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4014 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4015 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4016 local function m(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4017 for t,e in a(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4018 d(t,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4019 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4020 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4021 local function r(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4022 local e=o[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4023 if e and not s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4024 for a=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4025 local e=e[a](t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4026 if e~=nil then return e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4027 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4028 elseif e and s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4029 for o=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4030 local e=s(e[o],a,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4031 if e~=nil then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4032 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4033 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4034 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4035 local function f(s,h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4036 local e=n[s]or t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4037 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4038 local a=#e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4039 local function i(o,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4040 a=a-1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4041 if a==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4042 if t==nil or e==t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4043 return r(o,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4044 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4045 e,a=t,#t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4046 return e[a](i,o,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4047 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4048 return e[a](i,o,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4049 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4050 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4051 return e[a](i,s,h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4052 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4053 return r(s,h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4054 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4055 local function r(a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4056 local e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4057 if a==false then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4058 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4059 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4060 e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4061 t=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4062 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4063 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4064 e=n[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4065 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4066 e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4067 n[a]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4068 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4069 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4070 e[#e+1]=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4071 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4072 local function h(a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4073 local e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4074 if a==false then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4075 e=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4076 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4077 e=n[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4078 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4079 if not e then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4080 for t=#e,1,-1 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4081 if e[t]==o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4082 w(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4083 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4084 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4085 if#e==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4086 if a==false then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4087 t=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4088 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4089 n[a]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4090 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4091 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4092 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4093 local function a(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4094 local e=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4095 s=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4096 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4097 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4098 return{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4099 add_handler=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4100 remove_handler=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4101 add_handlers=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4102 remove_handlers=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4103 get_handlers=c;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4104 wrappers={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4105 add_handler=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4106 remove_handler=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4107 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4108 add_wrapper=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4109 remove_wrapper=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4110 set_debug_hook=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4111 fire_event=f;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4112 _handlers=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4113 _event_map=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4114 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4115 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4116 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4117 new=f;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4118 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4119 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4120 package.preload['util.dataforms']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4121 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4122 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4123 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
4124 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4125 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4126 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4127 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4128 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4129 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4130 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4131 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4132 local e=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4133 local n=ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4134 local s,p=type,next;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4135 local u=tonumber;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4136 local r=tostring;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4137 local l=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4138 local c=require"util.stanza";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4139 local m=require"util.jid".prep;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4140 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4141 local y='jabber:x:data';
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4142 local f='http://jabber.org/protocol/xdata-validate';
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4143 local d={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4144 local t={__index=d};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4145 local function w(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4146 return e(a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4147 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4148 local function v(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4149 local o={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4150 title=e:get_child_text("title");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4151 instructions=e:get_child_text("instructions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4152 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4153 for t in e:childtags("field")do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4154 local e={
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4155 name=t.attr.var;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4156 label=t.attr.label;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4157 type=t.attr.type;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4158 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
4159 value=t:get_child_text("value");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4160 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4161 o[#o+1]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4162 if e.type then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4163 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4164 if e.type:match"list%-"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4165 for e in t:childtags("option")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4166 a[#a+1]={label=e.attr.label,value=e:get_child_text("value")};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4167 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4168 for e in t:childtags("value")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4169 a[#a+1]={label=e.attr.label,value=e:get_text(),default=true};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4170 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4171 elseif e.type:match"%-multi"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4172 for e in t:childtags("value")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4173 a[#a+1]=e.attr.label and{label=e.attr.label,value=e:get_text()}or e:get_text();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4174 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4175 if e.type=="text-multi"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4176 e.value=l(a,"\n");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4177 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4178 e.value=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4179 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4180 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4181 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4182 local t=t:get_child("validate",f);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4183 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4184 e.datatype=datatype.attr.datatype;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4185 local t=t:get_child("range");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4186 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4187 e.range_min=u(t.attr.min);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4188 e.range_max=u(t.attr.max);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4189 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4190 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4191 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4192 return w(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4193 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4194 function d.form(t,h,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4195 if not i then i="form"end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4196 local e=c.stanza("x",{xmlns=y,type=i});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4197 if i=="cancel"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4198 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4199 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4200 if i~="submit"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4201 if t.title then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4202 e:tag("title"):text(t.title):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4203 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4204 if t.instructions then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4205 e:tag("instructions"):text(t.instructions):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4206 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4207 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4208 for t,a in n(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4209 local o=a.type or"text-single";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4210 e:tag("field",{type=o,var=a.var or a.name,label=i~="submit"and a.label or nil});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4211 if i~="submit"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4212 if a.desc then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4213 e:text_tag("desc",a.desc);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4214 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4215 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4216 if i=="form"and a.datatype then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4217 e:tag("validate",{xmlns=f,datatype=a.datatype});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4218 if a.range_min or a.range_max then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4219 e:tag("range",{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4220 min=a.range_min and r(a.range_min),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4221 max=a.range_max and r(a.range_max),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4222 }):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4223 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4224 e:up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4225 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4226 local t=a.value;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4227 local r=a.options;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4228 if h and h[a.name]~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4229 t=h[a.name];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4230 if i=="form"and s(t)=="table"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4231 and(o=="list-single"or o=="list-multi")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4232 r,t=t,nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4233 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4234 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4235 if i=="form"and r then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4236 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4237 for o,t in n(r)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4238 if s(t)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4239 e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4240 if t.default then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4241 a[#a+1]=t.value;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4242 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4243 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4244 e:tag("option",{label=t}):tag("value"):text(t):up():up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4245 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4246 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4247 if not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4248 if o=="list-single"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4249 t=a[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4250 elseif o=="list-multi"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4251 t=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4252 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4253 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4254 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4255 if t~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4256 if s(t)=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4257 t=("%g"):format(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4258 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4259 if o=="hidden"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4260 if s(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4261 e:tag("value")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4262 :add_child(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4263 :up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4264 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4265 e:tag("value"):text(t):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4266 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4267 elseif o=="boolean"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4268 e:tag("value"):text((t and"1")or"0"):up();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4269 elseif o=="fixed"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4270 e:tag("value"):text(t):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4271 elseif o=="jid-multi"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4272 for a,t in n(t)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4273 e:tag("value"):text(t):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4274 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4275 elseif o=="jid-single"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4276 e:tag("value"):text(t):up();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4277 elseif o=="text-single"or o=="text-private"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4278 e:tag("value"):text(t):up();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4279 elseif o=="text-multi"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4280 for t in t:gmatch("([^\r\n]+)\r?\n*")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4281 e:tag("value"):text(t):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4282 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4283 elseif o=="list-single"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4284 e:tag("value"):text(t):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4285 elseif o=="list-multi"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4286 for a,t in n(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4287 e:tag("value"):text(t):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4288 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4289 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4290 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4291 local t=a.media;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4292 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4293 e:tag("media",{xmlns="urn:xmpp:media-element",height=("%g"):format(t.height),width=("%g"):format(t.width)});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4294 for a,t in n(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4295 e:tag("uri",{type=t.type}):text(t.uri):up()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4296 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4297 e:up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4298 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4299 if i=="form"and a.required then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4300 e:tag("required"):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4301 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4302 e:up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4303 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4304 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4305 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4306 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4307 local h={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4308 function d.data(e,r,i)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4309 local o={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4310 local a={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4311 local s={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4312 for n,e in n(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4313 local n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4314 for t in r:childtags("field")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4315 if(e.var or e.name)==t.attr.var then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4316 n=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4317 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4318 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4319 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4320 if not n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4321 if i and i[e.name]~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4322 o[e.name]=i[e.name];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4323 elseif e.required then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4324 a[e.name]="Required value missing";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4325 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4326 elseif e.name then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4327 s[e.name]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4328 local t=t[e.type];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4329 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4330 local t,i=t(n,e.required);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4331 local n=e.datatype and h[e.datatype];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4332 if t~=nil and n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4333 local o,a=n(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4334 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4335 t=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4336 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4337 t,i=nil,a or("Invalid value for data of type "..e.datatype);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4338 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4339 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4340 o[e.name],a[e.name]=t,i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4341 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4342 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4343 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4344 if p(a)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4345 return o,a,s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4346 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4347 return o,nil,s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4348 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4349 local function e(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4350 local e=e:get_child_text("value");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4351 if a and(e==nil or e=="")then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4352 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4353 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4354 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4355 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4356 t["text-single"]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4357 t["text-private"]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4358 t["jid-single"]=
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4359 function(o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4360 local e,a=e(o,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4361 if not e then return e,a;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4362 local a=m(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4363 if not a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4364 return nil,"Invalid JID: "..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4365 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4366 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4367 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4368 t["jid-multi"]=
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4369 function(o,i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4370 local a={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4371 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4372 for t in o:childtags("value")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4373 local t=t:get_text();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4374 local o=m(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4375 a[#a+1]=o;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4376 if t and not o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4377 e[#e+1]=("Invalid JID: "..t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4378 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4379 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4380 if#a>0 then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4381 return a,(#e>0 and l(e,"\n")or nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4382 elseif i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4383 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4384 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4385 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4386 t["list-multi"]=
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4387 function(o,a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4388 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4389 for t in o:childtags("value")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4390 e[#e+1]=t:get_text();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4391 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4392 if#e>0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4393 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4394 elseif a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4395 return nil,"Required value missing";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4396 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4397 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4398 t["text-multi"]=
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4399 function(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4400 local e,a=t["list-multi"](a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4401 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4402 e=l(e,"\n");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4403 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4404 return e,a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4405 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4406 t["list-single"]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4407 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4408 ["1"]=true,["true"]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4409 ["0"]=false,["false"]=false,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4410 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4411 t["boolean"]=
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4412 function(o,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4413 local e,o=e(o,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4414 if not e then return e,o;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4415 local a=a[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4416 if a==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4417 return nil,"Invalid boolean representation:"..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4418 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4419 return a;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4420 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4421 t["hidden"]=
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4422 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4423 return e:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4424 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4425 h["xs:integer"]=
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4426 function(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4427 local e=u(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4428 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4429 return false,"not a number";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4430 elseif e%1~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4431 return false,"not an integer";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4432 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4433 if t.range_max and e>t.range_max then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4434 return false,"out of bounds";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4435 elseif t.range_min and e<t.range_min then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4436 return false,"out of bounds";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4437 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4438 return true,e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4439 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4440 local function t(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4441 if not c.is_stanza(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4442 return nil,"not a stanza object";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4443 elseif e.attr.xmlns~="jabber:x:data"or e.name~="x"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4444 return nil,"not a dataform element";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4445 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4446 for e in e:childtags("field")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4447 if e.attr.var=="FORM_TYPE"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4448 return e:get_child_text("value");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4449 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4450 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4451 return"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4452 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4453 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4454 new=w;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4455 from_stanza=v;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4456 get_type=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4457 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4458 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4459 package.preload['util.caps']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4460 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4461 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4462 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
4463 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4464 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4465 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4466 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4467 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4468 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4469 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4470 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4471 local l=require"util.encodings".base64.encode;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4472 local u=require"util.hashes".sha1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4473 local n,s,h=table.insert,table.sort,table.concat;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4474 local r=ipairs;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4475 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4476 local function d(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4477 local i,o,a={},{},{};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4478 for t,e in r(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4479 if e.name=="identity"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4480 n(i,(e.attr.category or"").."\0"..(e.attr.type or"").."\0"..(e.attr["xml:lang"]or"").."\0"..(e.attr.name or""));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4481 elseif e.name=="feature"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4482 n(o,e.attr.var or"");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4483 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
4484 local t={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4485 local o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4486 for a,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4487 if e.name=="field"and e.attr.var then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4488 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4489 for t,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4490 e=#e.tags==0 and e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4491 if e then n(a,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4492 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4493 s(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4494 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
4495 o=a[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4496 elseif#a>0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4497 n(t,e.attr.var.."\0"..h(a,"<"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4498 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4499 n(t,e.attr.var);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4500 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4501 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4502 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4503 s(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4504 t=h(t,"<");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4505 if o then t=o.."\0"..t;end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4506 n(a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4507 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4508 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4509 s(i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4510 s(o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4511 s(a);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4512 if#i>0 then i=h(i,"<"):gsub("%z","/").."<";else i="";end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4513 if#o>0 then o=h(o,"<").."<";else o="";end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4514 if#a>0 then a=h(a,"<"):gsub("%z","<").."<";else a="";end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4515 local e=i..o..a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4516 local t=l(u(e));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4517 return t,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4518 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4519 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4520 calculate_hash=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4521 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4522 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4523 package.preload['util.vcard']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4524 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4525 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4526 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
4527 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4528 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4529 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4530 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4531 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4532 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4533 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4534 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4535 local o=require"util.stanza";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4536 local a,c=table.insert,table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4537 local h=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4538 local e,s,m=next,pairs,ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4539 local u,l,d,r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4540 local f="\n";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4541 local i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4542 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4543 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4544 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4545 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4546 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4547 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4548 local function w(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4549 return e:gsub("[,:;\\]","\\%1"):gsub("\n","\\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4550 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4551 local function y(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4552 return e:gsub("\\?[\\nt:;,]",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4553 ["\\\\"]="\\",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4554 ["\\n"]="\n",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4555 ["\\r"]="\r",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4556 ["\\t"]="\t",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4557 ["\\:"]=":",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4558 ["\\;"]=";",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4559 ["\\,"]=",",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4560 [":"]="\29",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4561 [";"]="\30",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4562 [","]="\31",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4563 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4564 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4565 local function p(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4566 local a=o.stanza(t.name,{xmlns="vcard-temp"});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4567 local e=i[t.name];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4568 if e=="text"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4569 a:text(t[1]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4570 elseif h(e)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4571 if e.types and t.TYPE then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4572 if h(t.TYPE)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4573 for o,e in s(e.types)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4574 for o,t in s(t.TYPE)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4575 if t:upper()==e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4576 a:tag(e):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4577 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4578 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4579 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4580 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4581 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4582 a:tag(t.TYPE:upper()):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4583 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4584 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4585 if e.props then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4586 for o,e in s(e.props)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4587 if t[e]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4588 a:tag(e):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4589 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4590 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4591 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4592 if e.value then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4593 a:tag(e.value):text(t[1]):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4594 elseif e.values then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4595 local o=e.values;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4596 local i=o.behaviour=="repeat-last"and o[#o];
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4597 for o=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4598 a:tag(e.values[o]or i):text(t[o]):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4599 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4600 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4601 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4602 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4603 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4604 local function n(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4605 local e=o.stanza("vCard",{xmlns="vcard-temp"});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4606 for a=1,#t do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4607 e:add_child(p(t[a]));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4608 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4609 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4610 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4611 function r(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4612 if not e[1]or e[1].name then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4613 return n(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4614 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4615 local t=o.stanza("xCard",{xmlns="vcard-temp"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4616 for a=1,#e do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4617 t:add_child(n(e[a]));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4618 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4619 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4620 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4621 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4622 function u(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4623 t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4624 :gsub("\r\n","\n")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4625 :gsub("\n ","")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4626 :gsub("\n\n+","\n");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4627 local h={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4628 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4629 for t in t:gmatch("[^\n]+")do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4630 local t=y(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4631 local s,t,n=t:match("^([-%a]+)(\30?[^\29]*)\29(.*)$");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4632 n=n:gsub("\29",":");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4633 if#t>0 then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4634 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4635 for e,o,i in t:gmatch("\30([^=]+)(=?)([^\30]*)")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4636 e=e:upper();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4637 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4638 for e in i:gmatch("[^\31]+")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4639 t[#t+1]=e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4640 t[e]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4641 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4642 if o=="="then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4643 a[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4644 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4645 a[e]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4646 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4647 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4648 t=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4649 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4650 if s=="BEGIN"and n=="VCARD"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4651 e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4652 h[#h+1]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4653 elseif s=="END"and n=="VCARD"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4654 e=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4655 elseif e and i[s]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4656 local o=i[s];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4657 local i={name=s};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4658 e[#e+1]=i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4659 local s=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4660 e=i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4661 if o.types then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4662 for o,a in m(o.types)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4663 local a=a:lower();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4664 if(t.TYPE and t.TYPE[a]==true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4665 or t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4666 e.TYPE=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4667 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4668 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4669 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4670 if o.props then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4671 for o,a in m(o.props)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4672 if t[a]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4673 if t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4674 e[a]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4675 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4676 for o,t in m(t[a])do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4677 e[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4678 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4679 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4680 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4681 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4682 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4683 if o=="text"or o.value then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4684 a(e,n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4685 elseif o.values then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4686 local t="\30"..n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4687 for t in t:gmatch("\30([^\30]*)")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4688 a(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4689 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4690 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4691 e=s;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4692 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4693 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4694 return h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4695 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4696 local function n(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4697 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4698 for a=1,#t do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4699 e[a]=w(t[a]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4700 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4701 e=c(e,";");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4702 local a="";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4703 for t,e in s(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4704 if h(t)=="string"and t~="name"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4705 a=a..(";%s=%s"):format(t,h(e)=="table"and c(e,",")or e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4706 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4707 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4708 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
4709 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4710 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4711 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4712 a(e,"BEGIN:VCARD")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4713 for o=1,#t do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4714 a(e,n(t[o]));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4715 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4716 a(e,"END:VCARD")
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4717 return c(e,f);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4718 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4719 function l(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4720 if e[1]and e[1].name then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4721 return o(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4722 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4723 local t={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4724 for a=1,#e do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4725 t[a]=o(e[a]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4726 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4727 return c(t,f);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4728 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4729 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4730 local function n(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4731 local e=o.name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4732 local t=i[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4733 local e={name=e};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4734 if t=="text"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4735 e[1]=o:get_text();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4736 elseif h(t)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4737 if t.value then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4738 e[1]=o:get_child_text(t.value)or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4739 elseif t.values then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4740 local t=t.values;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4741 if t.behaviour=="repeat-last"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4742 for t=1,#o.tags do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4743 a(e,o.tags[t]:get_text()or"");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4744 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4745 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4746 for i=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4747 a(e,o:get_child_text(t[i])or"");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4748 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4749 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4750 elseif t.names then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4751 local t=t.names;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4752 for a=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4753 if o:get_child(t[a])then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4754 e[1]=t[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4755 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4756 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4757 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4758 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4759 if t.props_verbatim then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4760 for a,t in s(t.props_verbatim)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4761 e[a]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4762 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4763 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4764 if t.types then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4765 local t=t.types;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4766 e.TYPE={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4767 for i=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4768 if o:get_child(t[i])then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4769 a(e.TYPE,t[i]:lower());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4770 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4771 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4772 if#e.TYPE==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4773 e.TYPE=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4774 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4775 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4776 if t.props then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4777 local t=t.props;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4778 for i=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4779 local t=t[i]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4780 local o=o:get_child_text(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4781 if o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4782 e[t]=e[t]or{};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4783 a(e[t],o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4784 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4785 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4786 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4787 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4788 return nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4789 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4790 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4791 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4792 local function o(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4793 local e=e.tags;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4794 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4795 for o=1,#e do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4796 a(t,n(e[o]));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4797 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4798 return t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4799 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4800 function d(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4801 if e.attr.xmlns~="vcard-temp"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4802 return nil,"wrong-xmlns";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4804 if e.name=="xCard"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4805 local a={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4806 local t=e.tags;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4807 for e=1,#t do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4808 a[e]=o(t[e]);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4809 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4810 return a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4811 elseif e.name=="vCard"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4812 return o(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4813 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4814 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4815 i={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4816 VERSION="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4817 FN="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4818 N={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4819 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4820 "FAMILY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4821 "GIVEN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4822 "MIDDLE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4823 "PREFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4824 "SUFFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4825 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4826 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4827 NICKNAME="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4828 PHOTO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4829 props_verbatim={ENCODING={"b"}},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4830 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4831 value="BINVAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4832 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4833 BDAY="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4834 ADR={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4835 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4836 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4837 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4838 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4839 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4840 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4841 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4842 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4843 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4844 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4845 "POBOX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4846 "EXTADD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4847 "STREET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4848 "LOCALITY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4849 "REGION",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4850 "PCODE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4851 "CTRY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4852 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4853 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4854 LABEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4855 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4856 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4857 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4858 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4859 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4860 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4861 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4862 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4863 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4864 value="LINE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4865 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4866 TEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4867 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4868 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4869 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4870 "VOICE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4871 "FAX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4872 "PAGER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4873 "MSG",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4874 "CELL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4875 "VIDEO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4876 "BBS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4877 "MODEM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4878 "ISDN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4879 "PCS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4880 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4881 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4882 value="NUMBER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4883 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4884 EMAIL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4885 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4886 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4887 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4888 "INTERNET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4889 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4890 "X400",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4891 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4892 value="USERID",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4893 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4894 JABBERID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4895 MAILER="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4896 TZ="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4897 GEO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4898 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4899 "LAT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4900 "LON",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4901 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4902 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4903 TITLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4904 ROLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4905 LOGO="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4906 AGENT="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4907 ORG={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4908 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4909 behaviour="repeat-last",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4910 "ORGNAME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4911 "ORGUNIT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4912 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4913 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4914 CATEGORIES={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4915 values="KEYWORD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4916 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4917 NOTE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4918 PRODID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4919 REV="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4920 SORTSTRING="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4921 SOUND="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4922 UID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4923 URL="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4924 CLASS={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4925 names={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4926 "PUBLIC",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4927 "PRIVATE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4928 "CONFIDENTIAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4929 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4930 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4931 KEY={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4932 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4933 value="CRED",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4934 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4935 DESC="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4936 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4937 i.LOGO=i.PHOTO;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4938 i.SOUND=i.PHOTO;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4939 return{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4940 from_text=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4941 to_text=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4942 from_xep54=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4943 to_xep54=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4944 lua_to_text=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4945 lua_to_xep54=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4946 text_to_lua=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4947 text_to_xep54=function(...)return r(u(...));end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4948 xep54_to_lua=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4949 xep54_to_text=function(...)return l(d(...))end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4950 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4951 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4952 package.preload['util.logger']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4953 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4954 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4955 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
4956 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4957 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4958 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4959 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4960 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4961 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4962 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4963 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4964 local o=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4965 local c=ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4966 local u=require;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4967 local l=table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4968 local _ENV=nil;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4969 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4970 local t;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
4971 local function h(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4972 local a=t(e,"debug");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4973 local o=t(e,"info");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4974 local i=t(e,"warn");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4975 local n=t(e,"error");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4976 return function(t,e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4977 if t=="debug"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4978 return a(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4979 elseif t=="info"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4980 return o(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4981 elseif t=="warn"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4982 return i(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4983 elseif t=="error"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4984 return n(e,...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4985 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4986 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4987 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4988 function t(o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4989 local t=e[a];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4990 if not t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4991 t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4992 e[a]=t;
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 e=function(e,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4995 for i=1,#t do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4996 t[i](o,a,e,...);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4997 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4998 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4999 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5000 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5001 local function d()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5002 for t,e in o(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5003 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5004 e[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5006 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5007 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5008 local function i(t,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5009 if not e[t]then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5010 e[t]={a};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5011 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5012 e[t][#e[t]+1]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5013 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5014 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5015 local function r(s,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5016 local a=u"util.format".format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5017 local function e(o,t,e,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5018 return s(o,t,a(e,...));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5019 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5020 for a,t in c(n or{"debug","info","warn","error"})do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5021 i(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5022 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5023 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5024 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5025 local function n(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5026 local a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5027 for t,e in o(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5028 for t=#e,1,-1 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5029 if e[t]==i then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5030 l(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5031 a=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5032 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5033 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5034 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5035 return a;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5036 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5037 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5038 init=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5039 make_logger=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5040 reset=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5041 add_level_sink=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5042 add_simple_sink=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5043 new=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5044 remove_sink=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5045 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5046 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5047 package.preload['util.datetime']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5048 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5049 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5050 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
5051 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5052 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5053 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5054 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5055 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5056 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5057 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5058 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5059 local e=os.date;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5060 local i=os.time;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5061 local r=os.difftime;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5062 local t=math.floor;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5063 local s=tonumber;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5064 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5065 local function d(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5066 return e("!%Y-%m-%d",a and t(a)or nil);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5067 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5068 local function l(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5069 if a==nil or a%1==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5070 return e("!%Y-%m-%dT%H:%M:%SZ",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5071 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5072 local o=a%1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5073 local a=t(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5074 return e("!%Y-%m-%dT%H:%M:%S.%%06dZ",a):format(t(o*1e6));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5075 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5076 local function c(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5077 if a==nil or a%1==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5078 return e("!%H:%M:%S",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5079 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5080 local o=a%1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5081 local a=t(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5082 return e("!%H:%M:%S.%%06d",a):format(t(o*1e6));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5083 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5084 local function u(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5085 return e("!%Y%m%dT%H:%M:%S",a and t(a)or nil);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5086 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5087 local function m(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5088 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5089 local h,l,d,u,c,a,n=a:match("^(%d%d%d%d)%-?(%d%d)%-?(%d%d)T(%d%d):(%d%d):(%d%d%.?%d*)([Z+%-]?.*)$");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5090 if h then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5091 local o=i();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5092 local r=r(i(e("*t",o)),i(e("!*t",o)));
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5093 local o=0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5094 if n~=""and n~="Z"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5095 local a,t,e=n:match("([+%-])(%d%d):?(%d*)");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5096 if not a then return;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5097 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
5098 t,e=s(t),s(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5099 o=t*60*60+e*60;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5100 if a=="-"then o=-o;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5101 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5102 local e=a%1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5103 a=t(a+r)-o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5104 return i({year=h,month=l,day=d,hour=u,min=c,sec=a,isdst=false})+e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5105 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5106 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5107 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5108 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5109 date=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5110 datetime=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5111 time=c;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5112 legacy=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5113 parse=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5114 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5115 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5116 package.preload['util.json']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5117 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5118 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5119 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
5120 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5121 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5122 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5123 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5124 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5125 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5126 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5127 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5128 local p=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5129 local t,y,c=table.insert,table.concat,table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5130 local n=string.char;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5131 local z,d=tostring,tonumber;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5132 local u,r,j=pairs,ipairs,require"util.iterators".sorted_pairs;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5133 local i=next;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5134 local b,m=getmetatable,setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5135 local l=print;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5136 local a,e=pcall(require,"util.array");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5137 local v=a and b(e())or{};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5138 local a={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5139 local h=m({},{__tostring=function()return"null";end;});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5140 a.null=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5141 local f={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5142 ["\""]="\\\"",["\\"]="\\\\",["\b"]="\\b",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5143 ["\f"]="\\f",["\n"]="\\n",["\r"]="\\r",["\t"]="\\t"};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5144 for t=0,31 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5145 local e=n(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5146 if not f[e]then f[e]=("\\u%.4X"):format(t);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5147 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5148 local function q(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5149 if e<128 then return n(e);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5150 local t=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5151 if e<2048 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5152 local e=(e-t)/64;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5153 return n(128+64+e,128+t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5154 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5155 local a=e%4096;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5156 local o=(a-t)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5157 local e=(e-a)/4096;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5158 return n(128+64+32+e,128+o,128+t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5159 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5160 local k={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5161 number=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5162 string=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5163 table=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5164 boolean=true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5165 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5166 local x={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5167 __array=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5168 __hash=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5169 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5170 local o,g,s,w;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5171 function w(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5172 t(e,"\""..(a:gsub(".",f)).."\"");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5173 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5174 function s(a,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5175 t(e,"[");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5176 if i(a)then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5177 for i,a in r(a)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5178 o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5179 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5180 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5181 c(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5182 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5183 t(e,"]");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5184 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5185 function g(l,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5186 local a={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5187 local n={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5188 local d={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5189 for e,t in r(l)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5190 a[e]=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5191 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5192 for e,t in u(l)do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5193 local o,i=p(e),p(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5194 if k[i]or t==h then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5195 if o=="string"and not x[e]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5196 d[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5197 elseif(k[o]or e==h)and a[e]==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5198 n[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5199 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5200 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5201 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5202 if i(n)~=nil or i(d)~=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
5203 t(e,"{");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5204 local r=#e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5205 local h=e.ordered and j or u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5206 for a,i in h(d)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5207 w(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5208 t(e,":");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5209 o(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5210 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5211 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5212 if i(n)~=nil then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5213 t(e,"\"__hash\":[");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5214 for a,i in u(n)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5215 o(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5216 t(e,",");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5217 o(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5218 t(e,",");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5219 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5220 c(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5221 t(e,"]");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5222 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5223 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5224 if i(a)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5225 t(e,"\"__array\":");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5226 s(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5227 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5228 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5229 if r~=#e then c(e);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5230 t(e,"}");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5231 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5232 s(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5233 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5234 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5235 function o(e,a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5236 local o=p(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5237 if e==h then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5238 t(a,"null");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5239 elseif o=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5240 t(a,z(e));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5241 elseif o=="string"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5242 w(e,a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5243 elseif o=="table"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5244 local t=b(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5245 if t==v then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5246 s(e,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5247 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5248 g(e,a);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5249 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5250 elseif o=="boolean"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5251 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
5252 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5253 t(a,"null");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5254 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5255 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5256 function a.encode(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5257 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5258 o(t,e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5259 return y(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5260 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5261 function a.encode_ordered(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5262 local e={ordered=true};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5263 o(t,e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5264 return y(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5265 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5266 function a.encode_array(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5267 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5268 s(t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5269 return y(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5270 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5271 local function o(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5272 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
5273 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5274 local function c(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5275 local a=e.__array;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5276 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5277 e.__array=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5278 for o,a in r(a)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5279 t(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5280 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5281 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5282 local a=e.__hash;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5283 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5284 e.__hash=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5285 local t;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5286 for o,a in r(a)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5287 if t~=nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5288 e[t]=a;t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5289 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5290 t=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5291 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5292 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5293 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5294 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5295 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5296 local s,r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5297 local function u(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5298 local i={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5299 while true do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5300 local n,a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5301 e=o(t,e+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5302 if t:byte(e)~=34 then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5303 if t:byte(e)==125 then return i,e+1;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5304 return nil,"key expected";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5305 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5306 n,e=r(t,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5307 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
5308 e=o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5309 if t:byte(e)~=58 then return nil,"colon expected";end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5310 a,e=s(t,e+1);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5311 if a==nil then return nil,e;end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5312 i[n]=a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5313 e=o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5314 local t=t:byte(e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5315 if t==125 then return c(i),e+1;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5316 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
5317 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5318 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5319 local function c(n,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5320 local i={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5321 while true do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5322 local a,h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5323 a,e,h=s(n,e+1,93);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5324 if a==nil then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5325 if h then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5326 if#i~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5327 return nil,"value expected";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5328 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5329 a,e=m(i,v),e+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5330 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5331 return a,e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5332 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5333 t(i,a);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5334 e=o(n,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5335 local t=n:byte(e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5336 if t==93 then return m(i,v),e+1;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5337 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
5338 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5339 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5340 local t;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5341 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5342 local t,e=d(e:sub(3,6),16),d(e:sub(9,12),16);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5343 local e=t*1024+e-56613888;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5344 local o=e%64;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5345 e=(e-o)/64;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5346 local t=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5347 e=(e-t)/64;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5348 local a=e%64;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5349 e=(e-a)/64;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5350 return n(240+e,128+a,128+t,128+o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5351 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5352 local function n(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5353 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
5354 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5355 local e=d(e,16)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5356 if e>=55296 and e<=57343 then t=true;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5357 return q(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5358 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5359 t=true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5360 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5361 function r(o,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5362 e=e+1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5363 local a=o:find("\"",e,true);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5364 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5365 local e=o:sub(e,a-1);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5366 t=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5367 e=e:gsub("\\u[dD][89abAB]%x%x\\u[dD][cdefCDEF]%x%x",i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5368 e=e:gsub("\\u.?.?.?.?",n);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5369 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
5370 return e,a+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5371 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5372 return nil,"string eof";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5373 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5374 local function i(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5375 local e=e:match("[0-9%.%-eE%+]+",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5376 return d(e),t+#e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5377 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5378 local function d(t,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5379 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
5380 if o==117 and a==108 and t==108 then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5381 return h,e+4;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5382 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5383 return nil,"null parse failed";
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 local function n(t,e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5386 local o,t,a=t:byte(e+1,e+3);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5387 if o==114 and t==117 and a==101 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5388 return true,e+4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5389 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5390 return nil,"true parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5391 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5392 local function h(t,e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5393 local o,a,t,i=t:byte(e+1,e+4);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5394 if o==97 and a==108 and t==115 and i==101 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5395 return false,e+5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5396 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5397 return nil,"false parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5398 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5399 function s(a,e,s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5400 e=o(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5401 local t=a:byte(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5402 if t==123 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5403 return u(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5404 elseif t==91 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5405 return c(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5406 elseif t==34 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5407 return r(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5408 elseif t~=nil and t>=48 and t<=57 or t==45 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5409 return i(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5410 elseif t==110 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5411 return d(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5412 elseif t==116 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5413 return n(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5414 elseif t==102 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5415 return h(a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5416 elseif t==s then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5417 return nil,e,true;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5418 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5419 return nil,"value expected";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5420 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5421 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5422 local t={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5423 ["\\\""]="\\u0022";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5424 ["\\\\"]="\\u005c";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5425 ["\\/"]="\\u002f";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5426 ["\\b"]="\\u0008";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5427 ["\\f"]="\\u000C";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5428 ["\\n"]="\\u000A";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5429 ["\\r"]="\\u000D";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5430 ["\\t"]="\\u0009";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5431 ["\\u"]="\\u";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5432 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5433 function a.decode(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5434 e=e:gsub("\\.",t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5435 local t,a=s(e,1);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5436 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
5437 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
5438 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5439 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5440 function a.test(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5441 local e=a.encode(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5442 local t=a.decode(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5443 local t=a.encode(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5444 if e~=t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5445 l("FAILED");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5446 l("encoded:",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5447 l("recoded:",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5448 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5449 l(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5450 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5451 return e==t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5452 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5453 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5454 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5455 package.preload['util.xml']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5456 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5457 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5458 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
5459 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5460 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5461 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5462 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5463 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5464 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5465 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5466 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5467 local t=require"util.stanza";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5468 local u=require"lxp";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5469 local i=table.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5470 local r=table.remove;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5471 local c=error;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5472 local _ENV=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5473 local e=(function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5474 local d={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5475 ["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
5476 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5477 local n="\1";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5478 local h="^([^"..n.."]*)"..n.."?(.*)$";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5479 return function(l,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5480 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5481 local a=t.stanza("root");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5482 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5483 local s={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5484 function e:StartNamespaceDecl(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5485 if e~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5486 i(t,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5487 i(s,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5488 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5489 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5490 function e:EndNamespaceDecl(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5491 if e~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5492 r(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5493 r(s);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5494 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5495 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5496 function e:StartElement(o,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5497 local o,i=o:match(h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5498 if i==""then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5499 o,i="",o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5500 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5501 if o~=""then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5502 e.xmlns=o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5503 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5504 for t=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5505 local a=e[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5506 e[t]=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5507 local t,o=a:match(h);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5508 if o~=""then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5509 t=d[t];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5510 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5511 e[t..":"..o]=e[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5512 e[a]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5513 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5514 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5515 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5516 local o={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5517 for e=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5518 o[s[e]]=t[e];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5519 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5520 a:tag(i,e,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5521 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5522 function e:CharacterData(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5523 a:text(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5524 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5525 function e:EndElement()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5526 a:up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5527 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5528 local function t(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5529 if not t.stop or not t:stop()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5530 c("Failed to abort parsing");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5531 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5532 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5533 e.StartDoctypeDecl=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5534 if not o or not o.allow_comments then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5535 e.Comment=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5536 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5537 if not o or not o.allow_processing_instructions then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5538 e.ProcessingInstruction=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5539 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5540 local t=u.new(e,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5541 local e,i,o,n=t:parse(l);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5542 if e then e,i,o,n=t:parse();end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5543 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5544 return a.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5545 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5546 return e,("%s (line %d, col %d))"):format(i,o,n);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5547 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5548 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5549 end)();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5550 return{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5551 parse=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5552 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5553 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5554 package.preload['util.rsm']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5555 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5556 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5557 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
5558 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5559 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5560 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5561 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5562 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5563 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5564 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5565 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5566 local s=require"util.stanza".stanza;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5567 local t,o=tostring,tonumber;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5568 local h=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5569 local n=pairs;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5570 local i='http://jabber.org/protocol/rsm';
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5571 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5572 do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5573 local e=a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5574 local function t(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5575 return o((e:get_text()));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5576 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5577 local function a(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5578 return t:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5579 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5580 e.after=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5581 e.before=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5582 local e=e:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5583 return e==""or e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5584 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5585 e.max=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5586 e.index=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5587 e.first=function(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5588 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
5589 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5590 e.last=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5591 e.count=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5592 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5593 local h=setmetatable({
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5594 first=function(a,e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5595 if h(e)=="table"then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5596 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
5597 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5598 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
5599 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5600 end;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5601 before=function(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5602 if e==true then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5603 a:tag("before"):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5604 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5605 a:tag("before"):text(t(e)):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5606 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5607 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5608 },{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5609 __index=function(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5610 return function(a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5611 a:tag(e):text(t(o)):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5612 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5613 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5614 });
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5615 local function t(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5616 local o={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5617 for t in e:childtags()do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5618 local e=t.name;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5619 local a=e and a[e];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5620 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5621 o[e]=a(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5622 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5623 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5624 return o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5625 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5626 local function o(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5627 local e=s("set",{xmlns=i});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5628 for t,o in n(t)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5629 if a[t]then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5630 h[t](e,o);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5631 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5632 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5633 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5634 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5635 local function a(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5636 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
5637 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
5638 return t(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5639 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5640 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5641 return{parse=t,generate=o,get=a};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5642 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5643 package.preload['util.random']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5644 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5645 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5646 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
5647 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5648 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5649 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5650 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5651 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5652 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5653 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5654 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5655 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
5656 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5657 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5658 seed=function()end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5659 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
5660 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5661 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5662 local e=require"crypto"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5663 return e.rand;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5664 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5665 package.preload['util.ip']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5666 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5667 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5668 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
5669 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5670 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5671 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5672 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5673 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5674 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5675 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5676 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5677 local s=require"util.net";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5678 local n=require"util.hex";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5679 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5680 local o={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5681 __index=function(o,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5682 local e=a[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5683 if not e then return nil;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5684 local e=e(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5685 o[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5686 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5687 end,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5688 __tostring=function(e)return e.addr;end,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5689 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5690 o.__eq=function(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5691 if getmetatable(t)~=o or getmetatable(e)~=o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5692 return false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5693 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5694 return t.packed==e.packed;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5695 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5696 local h={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5697 ["0"]="0000",["1"]="0001",["2"]="0010",["3"]="0011",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5698 ["4"]="0100",["5"]="0101",["6"]="0110",["7"]="0111",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5699 ["8"]="1000",["9"]="1001",["A"]="1010",["B"]="1011",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5700 ["C"]="1100",["D"]="1101",["E"]="1110",["F"]="1111",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5701 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5702 local function t(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5703 local i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5704 if(not e or e=="IPv6")and a:find('%',1,true)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5705 a,i=a:match("^(.-)%%(.*)");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5706 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5707 local t,n=s.pton(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5708 if not t then return t,n end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5709 if e=="IPv6"and#t~=16 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5710 return nil,"invalid-ipv6";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5711 elseif e=="IPv4"and#t~=4 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5712 return nil,"invalid-ipv4";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5713 elseif not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5714 if#t==16 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5715 e="IPv6";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5716 elseif#t==4 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5717 e="IPv4";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5718 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5719 return nil,"unknown protocol";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5720 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5721 elseif e~="IPv6"and e~="IPv4"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5722 return nil,"invalid protocol";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5723 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5724 return setmetatable({addr=a,packed=t,proto=e,zone=i},o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5725 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5726 function a:normal()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5727 return s.ntop(self.packed);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5728 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5729 function a.bits(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5730 return n.encode(e.packed):upper():gsub(".",h);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5731 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5732 function a.bits_full(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5733 if e.proto=="IPv4"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5734 e=e.toV4mapped;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5735 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5736 return e.bits;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5737 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5738 local e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5739 local function v(t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5740 t,a=t.bits_full,a.bits_full;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5741 for e=1,128 do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5742 if t:sub(e,e)~=a:sub(e,e)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5743 return e-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5744 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5745 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5746 return 128;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5747 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5748 local n=t("::1");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5749 local w=t("127.0.0.0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5750 local h=t("2002::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5751 local d=t("2001::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5752 local p=t("fe80::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5753 local m=t("169.254.0.0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5754 local r=t("fc00::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5755 local i=t("fec0::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5756 local l=t("3ffe::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5757 local u=t("::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5758 local f=t("ff00::");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5759 local c=t("::ffff:0:0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5760 local function y(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5761 if e(t,w,8)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5762 return 2;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5763 elseif e(t,m,16)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5764 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5765 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5766 return 14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5767 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5768 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5769 local function w(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5770 if t==n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5771 return 2;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5772 elseif e(t,p,10)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5773 return 2;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5774 elseif e(t,i,10)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5775 return 5;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5776 elseif e(t,f,10)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5777 return t.packed:byte(2)%16;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5778 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5779 return 14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5780 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5781 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5782 local function m(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5783 if t==n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5784 return 0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5785 elseif e(t,h,16)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5786 return 2;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5787 elseif e(t,d,32)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5788 return 5;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5789 elseif e(t,r,7)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5790 return 13;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5791 elseif e(t,i,10)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5792 return 11;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5793 elseif e(t,l,16)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5794 return 12;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5795 elseif e(t,u,96)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5796 return 3;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5797 elseif e(t,c,96)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5798 return 4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5799 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5800 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5801 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5802 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5803 local function f(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5804 if t==n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5805 return 50;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5806 elseif e(t,h,16)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5807 return 30;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5808 elseif e(t,d,32)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5809 return 5;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5810 elseif e(t,r,7)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5811 return 3;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5812 elseif e(t,i,10)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5813 return 1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5814 elseif e(t,l,16)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5815 return 1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5816 elseif e(t,u,96)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5817 return 1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5818 elseif e(t,c,96)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5819 return 35;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5820 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5821 return 40;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5822 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5823 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5824 function a:toV4mapped()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5825 if self.proto~="IPv4"then return nil,"No IPv4 address"end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5826 local e=t("::ffff:"..self.normal);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5827 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5828 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5829 function a:label()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5830 if self.proto=="IPv4"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5831 return m(self.toV4mapped);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5832 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5833 return m(self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5834 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5835 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5836 function a:precedence()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5837 if self.proto=="IPv4"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5838 return f(self.toV4mapped);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5839 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5840 return f(self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5841 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5842 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5843 function a:scope()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5844 if self.proto=="IPv4"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5845 return y(self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5846 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5847 return w(self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5848 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5849 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5850 local r=t("10.0.0.0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5851 local h=t("172.16.0.0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5852 local i=t("192.168.0.0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5853 local n=t("100.64.0.0");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5854 function a:private()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5855 local t=self.scope~=14;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5856 if not t and self.proto=="IPv4"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5857 return e(self,r,8)or e(self,h,12)or e(self,i,16)or e(self,n,10);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5858 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5859 return t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5860 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5861 local function n(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5862 local o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5863 local a=e:find("/",1,true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5864 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5865 o=tonumber(e:sub(a+1,-1));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5866 e=e:sub(1,a-1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5867 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5868 return t(e),o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5869 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5870 function e(a,t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5871 if not e or e>=128 or t.proto=="IPv4"and e>=32 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5872 return a==t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5873 elseif e<1 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5874 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5875 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5876 if a.proto~=t.proto then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5877 if a.proto=="IPv4"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5878 a=a.toV4mapped;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5879 elseif t.proto=="IPv4"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5880 t=t.toV4mapped;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5881 e=e+(128-32);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5882 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5883 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5884 return a.bits:sub(1,e)==t.bits:sub(1,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5885 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5886 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5887 return getmetatable(e)==o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5888 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5889 local function o(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5890 if a%8~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5891 return error("ip.truncate() only supports multiples of 8 bits");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5892 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5893 local a=a/8;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5894 if not i(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5895 e=t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5896 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5897 return t(s.ntop(e.packed:sub(1,a)..("\0"):rep(#e.packed-a)))
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5898 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5899 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5900 new_ip=t,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5901 commonPrefixLength=v,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5902 parse_cidr=n,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5903 match=e,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5904 is_ip=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5905 truncate=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5906 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5907 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5908 package.preload['util.hex']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5909 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5910 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5911 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5912 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5913 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5914 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5915 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5916 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5917 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5918 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5919 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5920 local h=string.char;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5921 local s=string.format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5922 local o=string.gsub;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5923 local n=string.lower;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5924 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5925 local i={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5926 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5927 local e,t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5928 for o=0,255 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5929 e,t=h(o),s("%02x",o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5930 a[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5931 i[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5932 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5933 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5934 local function t(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5935 return(o(e,".",a));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5936 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5937 local function e(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5938 return(o(n(e),"%X*(%x%x)%X*",i));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5939 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5940 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5941 encode=t,decode=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5942 to=t,from=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5943 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5944 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5945 package.preload['util.net']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5946 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5947 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5948 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5949 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5950 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5951 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5952 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5953 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5954 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5955 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5956 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5957 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5958 pton=function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5959 if e:find":"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5960 return"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5961 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5962 return"\0\0\0\0"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5963 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5964 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5965 }
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5966 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5967 package.preload['util.sslconfig']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5968 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5969 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5970 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5971 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5972 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5973 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5974 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5975 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5976 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5977 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5978 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5979 local n=type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5980 local o=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5981 local t=rawset;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5982 local r=rawget;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5983 local c=error;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5984 local d=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5985 local l=table.insert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5986 local u=setmetatable;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5987 local m=require"util.paths".resolve_relative_path;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5988 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5989 local i={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5990 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5991 local f=function(e)return e end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5992 function i.options(h,s,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5993 local a=h[s]or{};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5994 if n(e)~="table"then e={e}end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5995 for o,e in o(e)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5996 if e==true or e==false then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5997 a[o]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5998 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
5999 a[e]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6000 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6001 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6002 t(h,s,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6003 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6004 i.verifyext=i.options;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6005 function e.options(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6006 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6007 for e,a in o(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6008 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6009 t[#t+1]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6010 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6011 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6012 return t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6013 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6014 e.verifyext=e.options;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6015 function e.ciphers(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6016 if n(t)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6017 return d(t,":");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6018 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6019 return t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6020 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6021 e.curveslist=e.ciphers;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6022 e.ciphersuites=e.ciphers;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6023 function e.key(t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6024 if n(t)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6025 return m(a._basedir,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6026 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6027 return nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6028 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6029 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6030 e.certificate=e.key;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6031 e.cafile=e.key;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6032 e.capath=e.key;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6033 e.dhparam=e.key;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6034 local a={"sslv2","sslv3","tlsv1","tlsv1_1","tlsv1_2","tlsv1_3"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6035 for e=1,#a do a[a[e].."+"]=e-1;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6036 local function h(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6037 local t=a[e.protocol];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6038 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6039 e.protocol="sslv23";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6040 for t=1,t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6041 l(e.options,"no_"..a[t]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6042 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6043 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6044 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6045 local function s(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6046 t(e,"_cache",nil);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6047 if n(a)=="table"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6048 for a,o in o(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6049 if a:sub(1,1)~="_"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6050 (i[a]or t)(e,a,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6051 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6052 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6053 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6054 return e
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6055 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6056 local function n(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6057 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6058 for t,o in o(i)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6059 if t:sub(1,1)~="_"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6060 a[t]=(e[t]or f)(o,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6061 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6062 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6063 h(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6064 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6065 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6066 local function i(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6067 local a=r(e,"_cache");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6068 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6069 return a,nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6070 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6071 local a,o=r(e,"_context_factory")(e:final(),e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6072 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6073 t(e,"_cache",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6074 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6075 return a,o
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6076 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6077 local e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6078 __index={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6079 apply=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6080 final=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6081 build=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6082 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6083 __newindex=function()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6084 c("SSL config objects cannot be modified directly. Use :apply()")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6085 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6086 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6087 local function a(t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6088 return u({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6089 _context_factory=t,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6090 _basedir=a,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6091 options={},
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6092 },e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6093 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6094 local function h(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6095 local a=a();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6096 for e,o in o(i)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6097 t(a,e,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6098 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6099 return a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6100 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6101 e.__index.clone=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6102 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6103 apply=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6104 final=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6105 _new=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6106 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6107 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6108 package.preload['util.paths']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6109 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6110 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6111 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6112 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6113 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6114 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6115 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6116 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6117 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6118 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6119 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6120 local i=table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6121 local t=package.config:sub(1,1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6122 local a={}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6123 function a.resolve_relative_path(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6124 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6125 a=a:gsub("%"..t.."+$","");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6126 e=e:gsub("^%.%"..t.."+","");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6127 local o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6128 if t=="/"and e:sub(1,1)~="/"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6129 o=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6130 elseif t=="\\"and(e:sub(1,1)~="/"and(e:sub(2,3)~=":\\"and e:sub(2,3)~=":/"))then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6131 o=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6132 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6133 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6134 return a..t..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6135 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6136 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6137 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6138 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6139 function a.glob_to_pattern(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6140 return"^"..e:gsub("[%p*?]",function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6141 if e=="*"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6142 return".*";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6143 elseif e=="?"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6144 return".";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6145 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6146 return"%"..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6147 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6148 end).."$";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6149 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6150 function a.join(a,e,o,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6151 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6152 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6153 if...then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6154 return i({a,e,o,...},t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6155 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6156 return a..t..e..t..o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6157 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6158 return a..t..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6159 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6160 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6161 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6162 function a.complement_lua_path(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6163 local a=_VERSION:match(" (.+)$");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6164 local o=package.config:sub(3,3);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6165 local e=package.config:sub(1,1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6166 local a=e.."lua"..e..a..e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6167 if not string.find(package.path,t,1,true)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6168 package.path=package.path..o..t..e.."share"..a.."?.lua";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6169 package.path=package.path..o..t..e.."share"..a.."?"..e.."init.lua";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6170 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6171 if not string.find(package.path,t,1,true)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6172 package.cpath=package.cpath..o..t..e.."lib"..a.."?.so";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6173 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6174 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6175 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6176 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6177 package.preload['util.mathcompat']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6178 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6179 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6180 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6181 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6182 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6183 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6184 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6185 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6186 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6187 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6188 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6189 if not math.type then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6190 local function t(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6191 if type(e)=="number"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6192 if e%1==0 and e~=e+1 and e~=e-1 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6193 return"integer"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6194 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6195 return"float"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6196 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6197 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6198 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6199 _G.math.type=t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6200 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6201 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6202 package.preload['util.dnsregistry']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6203 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6204 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6205 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6206 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6207 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6208 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6209 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6210 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6211 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6212 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6213 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6214 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6215 classes={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6216 ["IN"]=1;[1]="IN";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6217 ["CH"]=3;[3]="CH";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6218 ["HS"]=4;[4]="HS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6219 ["ANY"]=255;[255]="ANY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6220 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6221 types={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6222 ["A"]=1;[1]="A";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6223 ["NS"]=2;[2]="NS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6224 ["MD"]=3;[3]="MD";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6225 ["MF"]=4;[4]="MF";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6226 ["CNAME"]=5;[5]="CNAME";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6227 ["SOA"]=6;[6]="SOA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6228 ["MB"]=7;[7]="MB";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6229 ["MG"]=8;[8]="MG";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6230 ["MR"]=9;[9]="MR";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6231 ["NULL"]=10;[10]="NULL";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6232 ["WKS"]=11;[11]="WKS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6233 ["PTR"]=12;[12]="PTR";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6234 ["HINFO"]=13;[13]="HINFO";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6235 ["MINFO"]=14;[14]="MINFO";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6236 ["MX"]=15;[15]="MX";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6237 ["TXT"]=16;[16]="TXT";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6238 ["RP"]=17;[17]="RP";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6239 ["AFSDB"]=18;[18]="AFSDB";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6240 ["X25"]=19;[19]="X25";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6241 ["ISDN"]=20;[20]="ISDN";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6242 ["RT"]=21;[21]="RT";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6243 ["NSAP"]=22;[22]="NSAP";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6244 ["NSAP-PTR"]=23;[23]="NSAP-PTR";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6245 ["SIG"]=24;[24]="SIG";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6246 ["KEY"]=25;[25]="KEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6247 ["PX"]=26;[26]="PX";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6248 ["GPOS"]=27;[27]="GPOS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6249 ["AAAA"]=28;[28]="AAAA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6250 ["LOC"]=29;[29]="LOC";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6251 ["NXT"]=30;[30]="NXT";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6252 ["EID"]=31;[31]="EID";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6253 ["NIMLOC"]=32;[32]="NIMLOC";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6254 ["SRV"]=33;[33]="SRV";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6255 ["ATMA"]=34;[34]="ATMA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6256 ["NAPTR"]=35;[35]="NAPTR";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6257 ["KX"]=36;[36]="KX";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6258 ["CERT"]=37;[37]="CERT";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6259 ["A6"]=38;[38]="A6";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6260 ["DNAME"]=39;[39]="DNAME";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6261 ["SINK"]=40;[40]="SINK";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6262 ["OPT"]=41;[41]="OPT";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6263 ["APL"]=42;[42]="APL";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6264 ["DS"]=43;[43]="DS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6265 ["SSHFP"]=44;[44]="SSHFP";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6266 ["IPSECKEY"]=45;[45]="IPSECKEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6267 ["RRSIG"]=46;[46]="RRSIG";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6268 ["NSEC"]=47;[47]="NSEC";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6269 ["DNSKEY"]=48;[48]="DNSKEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6270 ["DHCID"]=49;[49]="DHCID";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6271 ["NSEC3"]=50;[50]="NSEC3";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6272 ["NSEC3PARAM"]=51;[51]="NSEC3PARAM";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6273 ["TLSA"]=52;[52]="TLSA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6274 ["SMIMEA"]=53;[53]="SMIMEA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6275 ["HIP"]=55;[55]="HIP";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6276 ["NINFO"]=56;[56]="NINFO";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6277 ["RKEY"]=57;[57]="RKEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6278 ["TALINK"]=58;[58]="TALINK";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6279 ["CDS"]=59;[59]="CDS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6280 ["CDNSKEY"]=60;[60]="CDNSKEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6281 ["OPENPGPKEY"]=61;[61]="OPENPGPKEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6282 ["CSYNC"]=62;[62]="CSYNC";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6283 ["ZONEMD"]=63;[63]="ZONEMD";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6284 ["SVCB"]=64;[64]="SVCB";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6285 ["HTTPS"]=65;[65]="HTTPS";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6286 ["SPF"]=99;[99]="SPF";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6287 ["NID"]=104;[104]="NID";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6288 ["L32"]=105;[105]="L32";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6289 ["L64"]=106;[106]="L64";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6290 ["LP"]=107;[107]="LP";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6291 ["EUI48"]=108;[108]="EUI48";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6292 ["EUI64"]=109;[109]="EUI64";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6293 ["TKEY"]=249;[249]="TKEY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6294 ["TSIG"]=250;[250]="TSIG";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6295 ["IXFR"]=251;[251]="IXFR";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6296 ["AXFR"]=252;[252]="AXFR";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6297 ["MAILB"]=253;[253]="MAILB";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6298 ["MAILA"]=254;[254]="MAILA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6299 ["*"]=255;[255]="*";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6300 ["URI"]=256;[256]="URI";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6301 ["CAA"]=257;[257]="CAA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6302 ["AVC"]=258;[258]="AVC";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6303 ["DOA"]=259;[259]="DOA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6304 ["AMTRELAY"]=260;[260]="AMTRELAY";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6305 ["TA"]=32768;[32768]="TA";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6306 ["DLV"]=32769;[32769]="DLV";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6307 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6308 errors={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6309 [0]="NoError";["NoError"]="No Error";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6310 [1]="FormErr";["FormErr"]="Format Error";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6311 [2]="ServFail";["ServFail"]="Server Failure";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6312 [3]="NXDomain";["NXDomain"]="Non-Existent Domain";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6313 [4]="NotImp";["NotImp"]="Not Implemented";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6314 [5]="Refused";["Refused"]="Query Refused";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6315 [6]="YXDomain";["YXDomain"]="Name Exists when it should not";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6316 [7]="YXRRSet";["YXRRSet"]="RR Set Exists when it should not";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6317 [8]="NXRRSet";["NXRRSet"]="RR Set that should exist does not";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6318 [9]="NotAuth";["NotAuth"]="Server Not Authoritative for zone";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6319 [10]="NotZone";["NotZone"]="Name not contained in zone";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6320 [11]="DSOTYPENI";["DSOTYPENI"]="DSO-TYPE Not Implemented";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6321 [16]="BADVERS";["BADVERS"]="Bad OPT Version";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6322 [17]="BADKEY";["BADKEY"]="Key not recognized";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6323 [18]="BADTIME";["BADTIME"]="Signature out of time window";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6324 [19]="BADMODE";["BADMODE"]="Bad TKEY Mode";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6325 [20]="BADNAME";["BADNAME"]="Duplicate key name";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6326 [21]="BADALG";["BADALG"]="Algorithm not supported";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6327 [22]="BADTRUNC";["BADTRUNC"]="Bad Truncation";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6328 [23]="BADCOOKIE";["BADCOOKIE"]="Bad/missing Server Cookie";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6329 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6330 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6331 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6332 package.preload['net.tls_luasec']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6333 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6334 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6335 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6336 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6337 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6338 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6339 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6340 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6341 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6342 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6343 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6344 local t=require"ssl";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6345 local h=t.newcontext;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6346 local s=t.context or require"ssl.context";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6347 local o=io.open;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6348 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6349 local n={__index=e};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6350 function e:set_sni_host(a,t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6351 local e,t=self._builder:clone():apply({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6352 certificate=t,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6353 key=e,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6354 }):build();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6355 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6356 return false,t
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6357 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6358 self._sni_contexts[a]=e._inner
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6359 return true,nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6360 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6361 function e:remove_sni_host(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6362 self._sni_contexts[e]=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6363 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6364 function e:wrap(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6365 local e,t,a=pcall(t.wrap,e,self._inner);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6366 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6367 return nil,a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6368 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6369 return t,nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6370 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6371 local function i(e,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6372 if type(e.dhparam)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6373 local t,a=o(e.dhparam);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6374 if not t then return nil,"Could not open DH parameters: "..a end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6375 local a=t:read("*a");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6376 t:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6377 e.dhparam=function()return a;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6378 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6379 local t,a=h(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6380 if not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6381 return nil,a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6382 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6383 if t and e.ciphers then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6384 local o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6385 o,a=s.setcipher(t,e.ciphers);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6386 if not o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6387 return nil,a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6388 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6389 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6390 return setmetatable({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6391 _inner=t,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6392 _builder=i,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6393 _sni_contexts={},
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6394 },n),nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6395 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6396 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6397 new_context=i,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6398 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6399 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6400 package.preload['util.sasl.scram']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6401 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6402 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6403 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
6404 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6405 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6406 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6407 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6408 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6409 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6410 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6411 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6412 local n,m=require"mime".b64,require"mime".unb64;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6413 local t=require"util.hashes";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6414 local a=require"bit";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6415 local d=require"util.random";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6416 local p=tonumber;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6417 local s,e=string.char,string.byte;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6418 local i=string.gsub;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6419 local h=a.bxor;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6420 local function r(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6421 return(i(a,"()(.)",function(a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6422 return s(h(e(o),e(t,a)))
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6423 end));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6424 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6425 local f,t=t.sha1,t.hmac_sha1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6426 local function w(o,e,i)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6427 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
6428 local a=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6429 for i=2,i do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6430 e=t(o,e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6431 a=r(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6432 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6433 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6434 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6435 local function y(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6436 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6437 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6438 local function a(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6439 return(i(e,"[,=]",{[","]="=2C",["="]="=3D"}));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6440 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6441 local function s(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6442 if e:ssl()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6443 local e=e:socket();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6444 if e.info and e:info().protocol=="TLSv1.3"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6445 if e.exportkeyingmaterial then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6446 return"p=tls-exporter",e:exportkeyingmaterial("EXPORTER-Channel-Binding",32,"");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6447 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6448 elseif e.getfinished then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6449 return"p=tls-unique",e:getfinished();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6450 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6451 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6452 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6453 local function h(e,o)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6454 local a="n="..a(e.username);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6455 local i=n(d.bytes(15));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6456 local h="r="..i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6457 local l=a..","..h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6458 local d="";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6459 local a="n";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6460 if o=="SCRAM-SHA-1-PLUS"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6461 a,d=s(e.conn);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6462 elseif s(e.conn)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6463 a="y";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6464 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6465 local s=a..",,";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6466 local a=s..l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6467 local a,u=coroutine.yield(a);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6468 if a~="challenge"then return false end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6469 local a,o,c=u:match("(r=[^,]+),s=([^,]*),i=(%d+)");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6470 local c=p(c);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6471 o=m(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6472 if not a or not o or not c then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6473 return false,"Could not parse server_first_message";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6474 elseif a:find(i,3,true)~=3 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6475 return false,"nonce sent by server does not match our nonce";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6476 elseif a==h then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6477 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
6478 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6479 local i=s..d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6480 local i="c="..n(i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6481 local h=i..","..a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6482 local i;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6483 local a;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6484 local s;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6485 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
6486 a=e.client_key;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6487 s=e.server_key;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6488 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6489 if e.salted_password then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6490 i=e.salted_password;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6491 elseif e.password then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6492 i=w(y(e.password),o,c);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6493 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6494 s=t(i,"Server Key");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6495 a=t(i,"Client Key");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6496 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6497 local o=f(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6498 local e=l..","..u..","..h;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6499 local o=t(o,e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6500 local a=r(a,o);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6501 local t=t(s,e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6502 local e="p="..n(a);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6503 local e=h..","..e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6504 local e,a=coroutine.yield(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6505 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
6506 local e=a:match("v=([^,]+)");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6507 if m(e)~=t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6508 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
6509 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6510 return true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6511 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6512 return function(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6513 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
6514 if t=="SCRAM-SHA-1"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6515 return h,99;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6516 elseif t=="SCRAM-SHA-1-PLUS"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6517 if s(e.conn)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6518 return h,100;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6519 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6520 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6521 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6522 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6523 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6524 package.preload['util.sasl.plain']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6525 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6526 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6527 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
6528 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6529 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6530 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6531 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6532 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6533 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6534 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6535 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6536 return function(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6537 if t=="PLAIN"and e.username and e.password then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6538 return function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6539 return"success"==coroutine.yield("\0"..e.username.."\0"..e.password);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6540 end,5;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6541 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6542 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6543 end)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6544 package.preload['util.sasl.anonymous']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6545 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6546 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6547 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
6548 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6549 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6550 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6551 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6552 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6553 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6554 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6555 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6556 return function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6557 if e=="ANONYMOUS"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6558 return function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6559 return coroutine.yield()=="success";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6560 end,0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6561 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6562 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6563 end)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6564 package.preload['util.sasl.oauthbearer']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6565 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6566 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6567 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6568 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6569 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6570 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6571 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6572 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6573 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6574 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6575 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6576 return function(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6577 if e=="OAUTHBEARER"and a.username then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6578 return function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6579 local t=e.bearer_token and("Bearer "..e.bearer_token)or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6580 local t,a=coroutine.yield("n,a="..e.username.."@"..e.host..",\001auth="..t.."\001");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6581 if t=="success"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6582 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6583 elseif t=="challenge"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6584 e:event("oauth-failure",{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6585 json=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6586 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6587 if coroutine.yield("\001")~="failure"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6588 error("Unexpected SASL state: expected failure after challenge");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6589 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6590 return false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6591 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6592 end,a.bearer_token and 6 or 4;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6593 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6594 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6595 end)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6596 package.preload['verse.plugins.tls']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6597 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6598 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6599 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
6600 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6601 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6602 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6603 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6604 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6605 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6606 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6607 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6608 local a=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6609 local t="urn:ietf:params:xml:ns:xmpp-tls";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6610 function a.plugins.tls(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6611 local function i(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6612 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6613 if o:get_child("starttls",t)and e.conn.starttls then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6614 e:debug("Negotiating TLS...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6615 e:send(a.stanza("starttls",{xmlns=t}));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6616 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6617 elseif not e.conn.starttls and not e.secure then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6618 e:warn("SSL library (LuaSec) not loaded, so TLS not available");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6619 elseif not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6620 e:debug("Server doesn't offer TLS :(");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6621 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6622 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6623 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6624 if t.name=="proceed"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6625 e:debug("Server says proceed, handshake starting...");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6626 local t=a.tls_builder(".")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6627 :apply({mode="client",protocol="sslv23",options="no_sslv2",capath="/etc/ssl/certs"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6628 :apply(e.ssl or{});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6629 e.conn:starttls(t:build(),true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6630 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6631 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6632 local function a(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6633 if t=="ssl-handshake-complete"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6634 e.secure=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6635 e:debug("Re-opening stream...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6636 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6637 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6638 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6639 e:hook("stream-features",i,400);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6640 e:hook("stream/"..t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6641 e:hook("status",a,400);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6642 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6643 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6644 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6645 package.preload['verse.plugins.sasl']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6646 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6647 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6648 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
6649 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6650 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6651 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6652 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6653 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6654 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6655 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6656 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6657 local i=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6658 local h,r=require"mime".b64,require"mime".unb64;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6659 local o="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
6660 function i.plugins.sasl(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6661 local function d(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6662 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6663 e:debug("Authenticating with SASL...");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6664 local t=t:get_child("mechanisms",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6665 if not t then return end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6666 local a={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6667 local n={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6668 local s={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6669 for t in t:childtags("mechanism")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6670 t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6671 e:debug("Server offers %s",t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6672 s[t]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6673 if not a[t]then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6674 local i=t:match("[^-]+");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6675 local s,o=pcall(require,"util.sasl."..i:lower());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6676 if s then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6677 e:debug("Loaded SASL %s module",i);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6678 a[t],n[t]=o(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6679 elseif not tostring(o):match("not found")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6680 e:debug("Loading failed: %s",tostring(o));
12
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 local t={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6685 for e in pairs(a)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6686 table.insert(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6687 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6688 if not t[1]then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6689 e:event("authentication-failure",{condition="no-supported-sasl-mechanisms",mechanisms=s});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6690 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6691 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6692 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6693 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
6694 local t,n=t[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6695 e:debug("Selecting %s mechanism...",t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6696 e.sasl_mechanism=coroutine.wrap(a[t]);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6697 n=e:sasl_mechanism(t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6698 local t=i.stanza("auth",{xmlns=o,mechanism=t});
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6699 if n then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6700 t:text(h(n));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6701 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6702 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6703 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6704 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6705 local function a(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6706 if t.name=="failure"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6707 local a=t.tags[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6708 local t=t:get_child_text("text");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6709 e:event("authentication-failure",{condition=a.name,text=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6710 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6711 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6712 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6713 local t,a=e.sasl_mechanism(t.name,r(t:get_text()));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6714 if not t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6715 e:event("authentication-failure",{condition=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6716 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6717 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6718 elseif t==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6719 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6720 e.authenticated=true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6721 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6722 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6723 e:send(i.stanza("response",{xmlns=o}):text(h(t)));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6724 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6725 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6726 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6727 e:hook("stream-features",d,300);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6728 e:hook("stream/"..o,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6729 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6730 end
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 package.preload['verse.plugins.bind']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6733 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6734 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6735 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
6736 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6737 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6738 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6739 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6740 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6741 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6742 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6743 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6744 local t=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6745 local i=require"util.jid";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6746 local a="urn:ietf:params:xml:ns:xmpp-bind";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6747 function t.plugins.bind(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6748 local function o(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6749 if e.bound then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6750 e:debug("Binding resource...");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6751 e:send_iq(t.iq({id="bind",type="set"}):tag("bind",{xmlns=a}):tag("resource"):text(e.resource),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6752 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6753 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6754 local t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6755 :get_child("bind",a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6756 :get_child_text("jid");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6757 e.username,e.host,e.resource=i.split(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6758 e.jid,e.bound=t,true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6759 e:event("bind-success",{jid=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6760 elseif t.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6761 local a=t:child_with_name("error");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6762 local t,a,o=t:get_error();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6763 e:event("bind-failure",{error=a,text=o,type=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6764 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6765 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6766 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6767 e:hook("stream-features",o,200);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6768 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6769 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6770 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6771 package.preload['verse.plugins.smacks']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6772 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6773 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6774 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
6775 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6776 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6777 (select(t,...))(e);
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 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6780 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6781 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6782 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6783 local n=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6784 local r=require"socket".gettime;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6785 local s="urn:xmpp:sm:3";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6786 function n.plugins.smacks(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6787 local t=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6788 local a=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6789 local h=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6790 local o;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6791 local i=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6792 local function m(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6793 if i and(t.attr.xmlns=="jabber:client"or not t.attr.xmlns)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6794 i=i+1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6795 e:debug("Increasing handled stanzas to %d for %s",i,t:top_tag());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6796 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6797 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6798 local function c(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6799 if t and(a.name and not a.attr.xmlns)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6800 t[#t+1]=tostring(a);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6801 h=r();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6802 if not o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6803 o=true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6804 e:debug("Waiting to send ack request...");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6805 n.add_task(1,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6806 if#t==0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6807 o=false;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6808 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6809 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6810 local a=r()-h;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6811 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
6812 return 1-a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6813 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6814 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
6815 o=false;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6816 e:send(n.stanza("r",{xmlns=s}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6817 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6818 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6819 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6820 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6821 local function u()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6822 e:debug("smacks: connection lost");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6823 e.stream_management_supported=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6824 if e.resumption_token then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6825 e:debug("smacks: have resumption token, reconnecting in 1s...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6826 e.authenticated=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6827 n.add_task(1,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6828 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
6829 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6830 return true;
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 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6833 local function d()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6834 e.resumption_token=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6835 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6836 local function l(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6837 if o.name=="r"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6838 e:debug("Ack requested... acking %d handled stanzas",i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6839 e:send(n.stanza("a",{xmlns=s,h=tostring(i)}));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6840 elseif o.name=="a"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6841 local o=tonumber(o.attr.h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6842 if o>a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6843 local i=#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6844 for a=a+1,o do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6845 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6846 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6847 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
6848 a=o;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6849 elseif o<a then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6850 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
6851 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6852 elseif o.name=="enabled"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6853 i=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6854 e.pre_smacks_features=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6855 if o.attr.id then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6856 e.resumption_token=o.attr.id;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6857 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6858 elseif o.name=="resumed"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6859 e.pre_smacks_features=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6860 local o=tonumber(o.attr.h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6861 if o>a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6862 local i=#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6863 for a=a+1,o do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6864 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6865 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6866 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
6867 a=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6868 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6869 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6870 e:send(t[a]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6871 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6872 t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6873 e:debug("Resumed successfully");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6874 e:event("resumed");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6875 elseif o.name=="failed"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6876 e.bound=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6877 e.smacks=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6878 a=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6879 i=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6880 t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6881 local t=e.pre_smacks_features;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6882 e.pre_smacks_features=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6883 e:event("stream-features",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6884 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6885 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
6886 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6887 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6888 local function o()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6889 if e.stream_management_supported and not e.smacks then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6890 e:debug("smacks: sending enable");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6891 t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6892 a=0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6893 h=r();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6894 e:send(n.stanza("enable",{xmlns=s,resume="true"}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6895 e.smacks=true;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6896 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6897 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6898 local function a(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6899 if t:get_child("sm",s)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6900 e.pre_smacks_features=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6901 e.stream_management_supported=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6902 if e.smacks and e.bound then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6903 e:debug("Resuming stream with %d handled stanzas",i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6904 e:send(n.stanza("resume",{xmlns=s,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6905 h=tostring(i),previd=e.resumption_token}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6906 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6907 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6908 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6909 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6910 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6911 e:hook("stream-features",a,250);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6912 e:hook("stream/"..s,l);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6913 e:hook("bind-success",o,1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6914 e:hook("stanza",m);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6915 e:hook("outgoing",c);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6916 e:hook("closed",d,100);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6917 e:hook("disconnected",u,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6918 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6919 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6920 package.preload['verse.plugins.keepalive']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6921 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6922 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6923 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
6924 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6925 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6926 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6927 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6928 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6929 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6930 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6931 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6932 local t=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6933 function t.plugins.keepalive(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6934 e.keepalive_timeout=e.keepalive_timeout or 300;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6935 t.add_task(e.keepalive_timeout,function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6936 e.conn:write(" ");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6937 return e.keepalive_timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6938 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6939 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6940 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6941 package.preload['verse.plugins.disco']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6942 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6943 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6944 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
6945 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6946 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6947 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6948 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6949 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6950 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6951 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6952 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6953 local t=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6954 local e=require("mime").b64;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6955 local e=require("util.hashes").sha1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6956 local s=require"util.caps".calculate_hash;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6957 local h="http://jabber.org/protocol/caps";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6958 local e="http://jabber.org/protocol/disco";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6959 local o=e.."#info";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6960 local i=e.."#items";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6961 function t.plugins.disco(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6962 e:add_plugin("presence");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6963 local a={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6964 __index=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6965 local a={identities={},features={}};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6966 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
6967 return t[false][e]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6968 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6969 t[e]=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6970 return a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6971 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6972 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6973 local n={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6974 __index=function(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6975 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6976 t[a]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6977 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6978 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6979 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6980 e.disco={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6981 cache={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6982 info=setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6983 [false]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6984 identities={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6985 {category='client',type='pc',name='Verse'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6986 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6987 features={
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6988 [h]=true,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6989 [o]=true,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6990 [i]=true,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6991 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6992 },
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6993 },a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6994 items=setmetatable({[false]={}},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6995 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6996 e.caps={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6997 e.caps.node='http://code.matthewwild.co.uk/verse/'
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6998 local function r(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
6999 local i=e.disco.info[a or false];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7000 if a and a==e.caps.node.."#"..e.caps.hash then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7001 i=e.disco.info[false];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7002 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7003 local n,i=i.identities,i.features
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7004 local e=t.stanza("query",{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7005 xmlns=o,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7006 node=a,
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7007 });
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7008 for a,t in pairs(n)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7009 e:tag('identity',t):up()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7010 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7011 for t in pairs(i)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7012 e:tag('feature',{var=t}):up()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7013 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7014 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7015 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7016 setmetatable(e.caps,{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7017 __call=function(...)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7018 local a=s(r())
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7019 e.caps.hash=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7020 return t.stanza('c',{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7021 xmlns=h,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7022 hash='sha-1',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7023 node=e.caps.node,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7024 ver=a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7025 })
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 })
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7028 function e:set_identity(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7029 self.disco.info[t or false].identities={e};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7030 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7031 function e:add_identity(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7032 local e=self.disco.info[e or false].identities;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7033 e[#e+1]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7034 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7035 function e:add_disco_feature(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7036 local e=e.var or e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7037 self.disco.info[t or false].features[e]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7038 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7039 function e:remove_disco_feature(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7040 local e=e.var or e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7041 self.disco.info[t or false].features[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7042 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7043 function e:add_disco_item(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7044 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7045 e[#e+1]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7046 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7047 function e:remove_disco_item(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7048 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7049 for t=#e,1,-1 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7050 if e[t]==a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7051 table.remove(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7052 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7053 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7054 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7055 function e:jid_has_identity(t,e,a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7056 local o=self.disco.cache[t];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7057 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7058 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7059 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7060 local t=self.disco.cache[t].identities;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7061 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7062 return t[e.."/"..a]or false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7063 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7064 for t in pairs(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7065 if t:match("^(.*)/")==e then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7066 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7067 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7068 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7069 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7070 function e:jid_supports(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7071 local e=self.disco.cache[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7072 if not e or not e.features then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7073 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7074 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7075 return e.features[t]or false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7076 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7077 function e:get_local_services(o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7078 local e=self.disco.cache[self.host];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7079 if not(e)or not(e.items)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7080 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7081 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7082 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7083 for i,e in ipairs(e.items)do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7084 if self:jid_has_identity(e.jid,o,a)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7085 table.insert(t,e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7086 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7087 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7088 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7089 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7090 function e:disco_local_services(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7091 self:disco_items(self.host,nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7092 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7093 return a({});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7094 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7095 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7096 local function o()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7097 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7098 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7099 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7100 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7101 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7102 for a,t in ipairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7103 if t.jid then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7104 e=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7105 self:disco_info(t.jid,nil,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7106 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7107 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7108 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7109 return a(t);
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 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7112 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7113 function e:disco_info(e,a,h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7114 local t=t.iq({to=e,type="get"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7115 :tag("query",{xmlns=o,node=a});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7116 self:send_iq(t,function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7117 if t.attr.type=="error"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7118 return h(nil,t:get_error());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7119 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7120 local i,s,n={},{},{};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7121 for e in t:get_child("query",o):childtags()do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7122 self:debug("DISCO {%s}%s",e.attr.xmlns or"",e.name);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7123 if e.name=="identity"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7124 i[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
7125 elseif e.name=="feature"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7126 s[e.attr.var]=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7127 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7128 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7129 for e in t:get_child("query",o):childtags("x","jabber:x:data")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7130 self:debug("DISCO {%s}%s",e.attr.xmlns or"",e.name);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7131 local t=e:get_child_with_attr("field",nil,"var","FORM_TYPE");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7132 local a=t and t:get_child_text("value");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7133 self:debug("FORM: %s (%s)",a,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7134 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7135 n[a]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7137 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7138 if not self.disco.cache[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7139 self.disco.cache[e]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7140 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7141 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7142 if not self.disco.cache[e].nodes[a]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7143 self.disco.cache[e].nodes[a]={nodes={}};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7144 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7145 self.disco.cache[e].nodes[a].identities=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7146 self.disco.cache[e].nodes[a].features=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7147 self.disco.cache[e].nodes[a].extended=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7148 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7149 self.disco.cache[e].identities=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7150 self.disco.cache[e].features=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7151 self.disco.cache[e].extended=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7152 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7153 return h(self.disco.cache[e]);
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
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7156 function e:disco_items(a,o,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7157 local t=t.iq({to=a,type="get"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7158 :tag("query",{xmlns=i,node=o});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7159 self:send_iq(t,function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7160 if t.attr.type=="error"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7161 return n(nil,t:get_error());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7162 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7163 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7164 for t in t:get_child("query",i):childtags()do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7165 if t.name=="item"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7166 table.insert(e,{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7167 name=t.attr.name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7168 jid=t.attr.jid;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7169 node=t.attr.node;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7170 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7171 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7172 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7173 if not self.disco.cache[a]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7174 self.disco.cache[a]={nodes={}};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7175 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7176 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7177 if not self.disco.cache[a].nodes[o]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7178 self.disco.cache[a].nodes[o]={nodes={}};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7179 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7180 self.disco.cache[a].nodes[o].items=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7181 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7182 self.disco.cache[a].items=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7183 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7184 return n(e);
12
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 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7187 e:hook("iq/"..o,function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7188 local o=a.tags[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7189 if a.attr.type=='get'and o.name=="query"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7190 local o=r(o.attr.node);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7191 local t=t.reply(a):add_child(o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7192 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7193 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7194 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7195 end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7196 e:hook("iq/"..i,function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7197 local o=a.tags[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7198 if a.attr.type=='get'and o.name=="query"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7199 local n=e.disco.items[o.attr.node or false];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7200 local t=t.reply(a):tag('query',{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7201 xmlns=i,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7202 node=o.attr.node
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7203 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7204 for a=1,#n do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7205 t:tag('item',n[a]):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7206 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7207 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7208 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7209 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7210 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7211 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7212 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7213 if t then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7214 t=true;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7215 local function o(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7216 local a=e.disco.cache[t];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7217 if a then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7218 for a in pairs(a.identities)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7219 local o,a=a:match("^(.*)/(.*)$");
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7220 print(t,o,a)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7221 e:event("disco/service-discovered/"..o,{
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7222 type=a,jid=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7223 });
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7224 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7225 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7226 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7227 e:disco_info(e.host,nil,function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7228 o(e.host);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7229 end);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7230 e:disco_local_services(function(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7231 for a,t in ipairs(t)do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7232 o(t.jid);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7233 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7234 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7235 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7236 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7237 end,50);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7238 e:hook("presence-out",function(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7239 t:remove_children("c",h);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7240 t:reset():add_child(e:caps()):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7241 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7242 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7243 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7244 package.preload['verse.plugins.version']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7245 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7246 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7247 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
7248 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7249 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7250 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7251 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7252 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7253 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7254 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7255 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7256 local o=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7257 local t="jabber:iq:version";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7258 local function a(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7259 t.name=e.name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7260 t.version=e.version;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7261 t.platform=e.platform;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7262 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7263 function o.plugins.version(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7264 e.version={set=a};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7265 e:hook("iq/"..t,function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7266 if a.attr.type~="get"then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7267 local t=o.reply(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7268 :tag("query",{xmlns=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7269 if e.version.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7270 t:tag("name"):text(tostring(e.version.name)):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7271 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7272 if e.version.version then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7273 t:tag("version"):text(tostring(e.version.version)):up()
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 if e.version.platform then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7276 t:tag("os"):text(e.version.platform);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7277 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7278 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7279 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7280 end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7281 function e:query_version(i,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7282 a=a or function(e)return self:event("version/response",e);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7283 self:send_iq(o.iq({type="get",to=i})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7284 :tag("query",{xmlns=t}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7285 function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7286 if o.attr.type=="result"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7287 local e=o:get_child("query",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7288 local t=e and e:get_child_text("name");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7289 local o=e and e:get_child_text("version");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7290 local e=e and e:get_child_text("os");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7291 a({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7292 name=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7293 version=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7294 platform=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7295 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7296 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7297 local o,e,t=o:get_error();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7298 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7299 error=true;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7300 condition=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7301 text=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7302 type=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7303 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7304 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7305 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7306 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7307 return true;
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 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7310 package.preload['verse.plugins.ping']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7311 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7312 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7313 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
7314 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7315 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7316 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7317 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7318 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7319 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7320 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7321 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7322 local a=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7323 local s=require"socket".gettime;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7324 local o=require"util.id".short;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7325 local i="urn:xmpp:ping";
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7326 function a.plugins.ping(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7327 function e:ping(t,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7328 local h=s();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7329 local o=o();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7330 local a=a.iq{id=o,to=t,type="get"}:tag("ping",{xmlns=i});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7331 e:send_iq(a,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7332 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7333 if e.attr.type=="error"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7334 local o,e,a=e:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7335 if e~="service-unavailable"and e~="feature-not-implemented"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7336 n(nil,t,{type=o,condition=e,text=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7337 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7338 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7339 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7340 n(s()-h,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7341 end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7342 return o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7343 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7344 e:hook("iq/"..i,function(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7345 return e:send(a.reply(t));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7346 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7347 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7349 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7350 package.preload['verse.plugins.uptime']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7351 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7352 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7353 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
7354 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7355 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7356 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7357 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7358 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7359 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7360 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7361 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7362 local o=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7363 local t="jabber:iq:last";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7364 local function a(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7365 e.starttime=t.starttime;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7366 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7367 function o.plugins.uptime(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7368 e.uptime={set=a};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7369 e:hook("iq/"..t,function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7370 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
7371 local t=o.reply(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7372 :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
7373 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7374 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7375 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7376 function e:query_uptime(i,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7377 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
7378 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
7379 :tag("query",{xmlns=t}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7380 function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7381 local t=e:get_child("query",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7382 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
7383 local e=tonumber(t.attr.seconds);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7384 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7385 seconds=e or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7386 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7387 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7388 local o,e,t=e:get_error();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7389 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7390 error=true;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7391 condition=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7392 text=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7393 type=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7394 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7395 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7396 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7397 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7398 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7399 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7400 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7401 package.preload['verse.plugins.time']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7402 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7403 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7404 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7405 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7406 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7407 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7408 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7409 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7410 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7411 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7412 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7413 local e=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7414 local i=require"util.datetime";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7415 local o="urn:xmpp:time";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7416 function e.plugins.time(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7417 function t:query_time(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7418 t=t or function(e)return self:event("time/response",e);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7419 self:send_iq(e.iq({type="get",to=a})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7420 :tag("time",{xmlns=o}),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7421 function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7422 if a.attr.type=="result"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7423 local e=a:get_child("time",o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7424 local e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7425 tzo=e:get_child_text("tzo");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7426 utc=e:get_child_text("utc");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7427 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7428 if e.utc then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7429 e.timestamp=i.parse(e.utc);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7430 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7431 t(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7432 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7433 local o,a,e=a:get_error();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7434 t({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7435 error=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7436 condition=a;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7437 text=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7438 type=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7439 });
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 end);
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 return true;
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 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7446 package.preload['verse.plugins.blocking']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7447 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7448 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7449 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
7450 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7451 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7452 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7453 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7454 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7455 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7456 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7457 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7458 local a=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7459 local o="urn:xmpp:blocking";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7460 function a.plugins.blocking(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7461 e.blocking={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7462 function e.blocking:block_jid(i,t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7463 e:send_iq(a.iq{type="set"}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7464 :tag("block",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7465 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7466 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7467 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7468 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7469 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7470 function e.blocking:unblock_jid(i,t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7471 e:send_iq(a.iq{type="set"}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7472 :tag("unblock",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7473 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7474 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7475 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7476 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7477 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7478 function e.blocking:unblock_all_jids(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7479 e:send_iq(a.iq{type="set"}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7480 :tag("unblock",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7481 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7482 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7483 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7484 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7485 function e.blocking:get_blocked_jids(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7486 e:send_iq(a.iq{type="get"}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7487 :tag("blocklist",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7488 ,function(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7489 local a=e:get_child("blocklist",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7490 if not a then return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7491 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7492 for t in a:childtags()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7493 e[#e+1]=t.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7494 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7495 return t and t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7496 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7497 ,function(e)return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7498 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7499 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7500 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7501 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7502 package.preload['verse.plugins.jingle']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7503 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7504 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7505 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
7506 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7507 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7508 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7509 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7510 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7511 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7512 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7513 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7514 local a=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7515 local e=require"util.timer";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7516 local n=require"util.id".short;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7517 local i="urn:xmpp:jingle:1";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7518 local r="urn:xmpp:jingle:errors:1";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7519 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7520 t.__index=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7521 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7522 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7523 function a.plugins.jingle(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7524 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7525 e:add_disco_feature(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7526 end,10);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7527 function e:jingle(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7528 return a.eventable(setmetatable(base or{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7529 role="initiator";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7530 peer=o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7531 sid=n();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7532 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7533 },t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7534 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7535 function e:register_jingle_transport(e)
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 function e:register_jingle_content_type(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7538 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7539 local function u(n)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7540 local s=n:get_child("jingle",i);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7541 local h=s.attr.sid;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7542 local o=s.attr.action;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7543 local h=e:event("jingle/"..h,n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7544 if h==true then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7545 e:send(a.reply(n));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7546 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7547 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7548 if o~="session-initiate"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7549 local t=a.error_reply(n,"cancel","item-not-found")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7550 :tag("unknown-session",{xmlns=r}):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7551 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7552 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7553 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7554 local l=s.attr.sid;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7555 local o=a.eventable{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7556 role="receiver";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7557 peer=n.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7558 sid=l;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7559 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7560 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7561 setmetatable(o,t);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7562 local h;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7563 local r,d;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7564 for t in s:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7565 if t.name=="content"and t.attr.xmlns==i then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7566 local i=t:child_with_name("description");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7567 local a=i.attr.xmlns;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7568 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7569 local e=e:event("jingle/content/"..a,o,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7570 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7571 r=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7572 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7573 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7574 local a=t:child_with_name("transport");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7575 local i=a.attr.xmlns;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7576 d=e:event("jingle/transport/"..i,o,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7577 if r and d then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7578 h=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7579 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7580 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7581 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7582 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7583 if not r then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7584 e:send(a.error_reply(n,"cancel","feature-not-implemented","The specified content is not supported"));
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7585 return true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7586 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7587 if not d then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7588 e:send(a.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
7589 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7590 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7591 e:send(a.reply(n));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7592 o.content_tag=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7593 o.creator,o.name=h.attr.creator,h.attr.name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7594 o.content,o.transport=r,d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7595 function o:decline()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7596 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7597 e:hook("jingle/"..l,function(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7598 if e.attr.from~=o.peer then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7599 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7600 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7601 local e=e:get_child("jingle",i);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7602 return o:handle_command(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7603 end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7604 e:event("jingle",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7605 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7606 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7607 function t:handle_command(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7608 local t=a.attr.action;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7609 e:debug("Handling Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7610 if t=="session-terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7611 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7612 elseif t=="session-accept"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7613 self:handle_accepted(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7614 elseif t=="transport-info"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7615 e:debug("Handling transport-info");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7616 self.transport:info_received(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7617 elseif t=="transport-replace"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7618 e:error("Peer wanted to swap transport, not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7619 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7620 e:warn("Unhandled Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7621 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7622 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7623 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7624 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7625 function t:send_command(e,o,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7626 local e=a.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7627 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7628 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7629 sid=self.sid,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7630 action=e,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7631 initiator=self.role=="initiator"and self.stream.jid or nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7632 responder=self.role=="responder"and self.jid or nil,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7633 }):add_child(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7634 if not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7635 self.stream:send(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7636 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7637 self.stream:send_iq(e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7638 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7639 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7640 function t:accept(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7641 local a=a.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7642 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7643 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7644 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7645 action="session-accept",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7646 responder=e.jid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7647 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7648 :tag("content",{creator=self.creator,name=self.name});
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7649 local o=self.content:generate_accept(self.content_tag:child_with_name("description"),t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7650 a:add_child(o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7651 local t=self.transport:generate_accept(self.content_tag:child_with_name("transport"),t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7652 a:add_child(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7653 local t=self;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7654 e:send_iq(a,function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7655 if a.attr.type=="error"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7656 local a,t,a=a:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7657 e:error("session-accept rejected: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7658 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7659 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7660 t.transport:connect(function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7661 e:warn("CONNECTED (receiver)!!!");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7662 t.state="active";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7663 t:event("connected",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7664 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7665 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7666 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7667 e:hook("iq/"..i,u);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7668 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7669 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7670 function t:offer(t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7671 local e=a.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7672 :tag("jingle",{xmlns=i,action="session-initiate",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7673 initiator=self.stream.jid,sid=self.sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7674 e:tag("content",{creator=self.role,name=t});
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7675 local t=self.stream:event("jingle/describe/"..t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7676 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7677 return false,"Unknown content type";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7678 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7679 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7680 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
7681 self.transport=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7682 e:add_child(t:generate_initiate());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7683 self.stream:debug("Hooking %s","jingle/"..self.sid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7684 self.stream:hook("jingle/"..self.sid,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7685 if e.attr.from~=self.peer then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7686 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7687 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7688 local e=e:get_child("jingle",i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7689 return self:handle_command(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7690 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7691 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7692 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7693 self.state="terminated";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7694 local e,t,a=e:get_error();
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7695 return self:event("error",{type=e,condition=t,text=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7696 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7697 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7698 self.state="pending";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7699 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7700 function t:terminate(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7701 local e=a.stanza("reason"):tag(e or"success");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7702 self:send_command("session-terminate",e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7703 self.state="terminated";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7704 self.transport:disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7705 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7706 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7707 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7708 function t:destroy()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7709 self:event("terminated");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7710 self.stream:unhook("jingle/"..self.sid,self.handle_command);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7711 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7712 function t:handle_accepted(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7713 local e=e:child_with_name("transport");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7714 self.transport:handle_accepted(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7715 self.transport:connect(function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7716 self.stream:debug("CONNECTED (initiator)!")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7717 self.state="active";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7718 self:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7719 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7720 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7721 function t:set_source(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7722 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7723 local e,i=a();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7724 if e and e~=""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7725 self.transport.conn:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7726 elseif e==""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7727 return t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7728 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7729 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7730 self:terminate();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7731 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7732 self.transport.conn:unhook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7733 a=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7734 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7735 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7736 self.transport.conn:hook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7737 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7738 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7739 function t:set_sink(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7740 self.transport.conn:hook("incoming-raw",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7741 self.transport.conn:hook("disconnected",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7742 self.stream:debug("Closing sink...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7743 local e=e.reason;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7744 if e=="closed"then e=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7745 t(nil,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7746 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7747 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7748 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7749 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
7750 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7751 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7752 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
7753 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7754 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7755 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7756 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7757 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7758 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7759 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7760 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7761 local i=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7762 local n=require"ltn12";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7763 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
7764 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
7765 function i.plugins.jingle_ft(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7766 t:hook("ready",function()
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7767 t:add_disco_feature(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7768 end,10);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7769 local o={type="file"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7770 function o:generate_accept(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7771 if e and e.save_file then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7772 self.jingle:hook("connected",function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7773 local e=n.sink.file(io.open(e.save_file,"w+"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7774 self.jingle:set_sink(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7775 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7776 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7777 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7778 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7779 local o={__index=o};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7780 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
7781 local e=e:get_child("file");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7782 local e={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7783 name=e:get_child_text("name");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7784 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
7785 desc=e:get_child_text("desc");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7786 date=e:get_child_text("date");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7787 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7788 return setmetatable({jingle=t,file=e},o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7789 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7790 t:hook("jingle/describe/file",function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7791 local t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7792 if e.timestamp then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7793 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
7794 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7795 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
7796 :tag("file")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7797 :tag("name"):text(e.filename):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7798 :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
7799 :tag("date"):text(t):up()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7800 :tag("desc"):text(e.description):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7801 :up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7802 end);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7803 function t:send_file(i,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7804 local e,a=io.open(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7805 if not e then return e,a;end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7806 local o=e:seek("end",0);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7807 e:seek("set",0);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7808 local a=n.source.file(e);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7809 local e=self:jingle(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7810 e:offer("file",{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7811 filename=t:match("[^"..s.."]+$");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7812 size=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7813 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7814 e:hook("connected",function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7815 e:set_source(a,true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7816 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7817 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7818 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7819 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7820 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7821 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
7822 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7823 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7824 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
7825 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7826 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7827 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7828 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7829 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7830 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7831 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7832 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7833 local a=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7834 local o="urn:xmpp:jingle:transports:s5b:1";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7835 local d="http://jabber.org/protocol/bytestreams";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7836 local h=require"util.hashes".sha1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7837 local l=require"util.id".short;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7838 local function r(e,s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7839 local function n()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7840 e:unhook("connected",n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7841 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7842 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7843 local function i(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7844 e:unhook("incoming-raw",i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7845 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7846 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7847 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7848 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7849 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7850 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7851 local function o(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7852 e:unhook("incoming-raw",o);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7853 if t~="\005\000"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7854 local a="version-mismatch";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7855 if t:sub(1,1)=="\005"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7856 a="authentication-failure";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7857 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7858 return e:event("error",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7859 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7860 e:send(string.char(5,1,0,3,#s)..s.."\0\0");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7861 e:hook("incoming-raw",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7862 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7863 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7864 e:hook("connected",n,200);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7865 e:hook("incoming-raw",o,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7866 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7867 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7868 local function s(o,e,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7869 local e=a.new(nil,{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7870 streamhosts=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7871 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7872 });
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7873 local function t(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7874 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7875 return o(nil,a.reason);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7876 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7877 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7878 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7879 e:debug("Attempting to connect to "..e.streamhosts[e.current_host].host..":"..e.streamhosts[e.current_host].port.."...");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7880 local a,t=e:connect(
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7881 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7882 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7883 );
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7884 if not a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7885 e:debug("Error connecting to proxy (%s:%s): %s",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7886 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7887 e.streamhosts[e.current_host].port,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7888 t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7889 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7890 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7891 e:debug("Connecting...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7892 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7893 r(e,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7894 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7895 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7896 e:unhook("disconnected",t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7897 return o(nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7898 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7899 e:hook("disconnected",t,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7900 e:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7901 e:unhook("disconnected",t);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7902 o(e.streamhosts[e.current_host],e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7903 end,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7904 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7905 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7906 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7907 function a.plugins.jingle_s5b(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7908 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7909 e:add_disco_feature(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7910 end,10);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7911 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7912 function t:generate_initiate()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7913 self.s5b_sid=l();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7914 local i=a.stanza("transport",{xmlns=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7915 mode="tcp",sid=self.s5b_sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7916 local t=0;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7917 for a,o in pairs(e.proxy65.available_streamhosts)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7918 t=t+1;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7919 i:tag("candidate",{jid=a,host=o.host,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7920 port=o.port,cid=a,priority=t,type="proxy"}):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7921 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7922 e:debug("Have %d proxies",t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7923 return i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7924 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7925 function t:generate_accept(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7926 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7927 self.s5b_peer_candidates=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7928 self.s5b_mode=e.attr.mode or"tcp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7929 self.s5b_sid=e.attr.sid or self.jingle.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7930 for e in e:childtags()do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7931 t[e.attr.cid]={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7932 type=e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7933 jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7934 host=e.attr.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7935 port=tonumber(e.attr.port)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7936 priority=tonumber(e.attr.priority)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7937 cid=e.attr.cid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7938 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7939 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7940 local e=a.stanza("transport",{xmlns=o});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7941 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7942 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7943 function t:connect(i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7944 e:warn("Connecting!");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7945 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7946 for a,e in pairs(self.s5b_peer_candidates or{})do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7947 t[#t+1]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7948 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7949 if#t>0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7950 self.connecting_peer_candidates=true;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7951 local function n(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7952 self.jingle:send_command("transport-info",a.stanza("content",{creator=self.creator,name=self.name})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7953 :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
7954 :tag("candidate-used",{cid=e.cid}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7955 self.onconnect_callback=i;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7956 self.conn=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7957 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7958 local e=h(self.s5b_sid..self.peer..e.jid,true);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7959 s(n,t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7960 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7961 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
7962 self.onconnect_callback=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7963 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7964 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7965 function t:info_received(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7966 e:warn("Info received");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7967 local n=t:child_with_name("content");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7968 local i=n:child_with_name("transport");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7969 if i:get_child("candidate-used")and not self.connecting_peer_candidates then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7970 local t=i:child_with_name("candidate-used");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7971 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7972 local function r(i,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7973 if self.jingle.role=="initiator"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7974 self.jingle.stream:send_iq(a.iq({to=i.jid,type="set"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7975 :tag("query",{xmlns=d,sid=self.s5b_sid})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7976 :tag("activate"):text(self.jingle.peer),function(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7977 if i.attr.type=="result"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7978 self.jingle:send_command("transport-info",a.stanza("content",n.attr)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7979 :tag("transport",{xmlns=o,sid=self.s5b_sid})
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7980 :tag("activated",{cid=t.attr.cid}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7981 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7982 self.onconnect_callback(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7983 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7984 self.jingle.stream:error("Failed to activate bytestream");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7985 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7986 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7987 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7988 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7989 self.jingle.stream:debug("CID: %s",self.jingle.stream.proxy65.available_streamhosts[t.attr.cid]);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7990 local t={
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7991 self.jingle.stream.proxy65.available_streamhosts[t.attr.cid];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7992 };
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7993 local e=h(self.s5b_sid..e.jid..self.peer,true);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
7994 s(r,t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7995 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7996 elseif i:get_child("activated")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7997 self.onconnect_callback(self.conn);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7998 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7999 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8000 function t:disconnect()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8001 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8002 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8003 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8004 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8005 function t:handle_accepted(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8006 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8007 local t={__index=t};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8008 e:hook("jingle/transport/"..o,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8009 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8010 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8011 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8012 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8013 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8014 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8015 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8016 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8017 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8018 package.preload['verse.plugins.proxy65']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8019 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8020 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8021 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
8022 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8023 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8024 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8025 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8026 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8027 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8028 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8029 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8030 local a=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8031 local h=require"util.id".short;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8032 local r=require"util.hashes".sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8033 local n={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8034 n.__index=n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8035 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
8036 local s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8037 function a.plugins.proxy65(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8038 t.proxy65=setmetatable({stream=t},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8039 t.proxy65.available_streamhosts={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8040 local e=0;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8041 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
8042 if o.type=="bytestreams"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8043 e=e+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8044 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
8045 :tag("query",{xmlns=i}),function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8046 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8047 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
8048 local e=a:get_child("query",i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8049 :get_child("streamhost").attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8050 t.proxy65.available_streamhosts[e.jid]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8051 jid=e.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8052 host=e.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8053 port=tonumber(e.port);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8054 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8055 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8056 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8057 t:event("proxy65/discovered-proxies",t.proxy65.available_streamhosts);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8058 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8059 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8060 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8061 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8062 t:hook("iq/"..i,function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8063 local e=a.new(nil,{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8064 initiator_jid=o.attr.from,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8065 streamhosts={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8066 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8067 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8068 for t in o.tags[1]:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8069 if t.name=="streamhost"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8070 table.insert(e.streamhosts,t.attr);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8071 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8072 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8073 local function i()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8074 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8075 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8076 e:connect(
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8077 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8078 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8079 );
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8080 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
8081 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8082 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8083 e:unhook("disconnected",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8084 t:send(a.error_reply(o,"cancel","item-not-found"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8085 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8086 function e:accept()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8087 e:hook("disconnected",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8088 e:hook("connected",function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8089 e:unhook("disconnected",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8090 local e=a.reply(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8091 :tag("query",o.tags[1].attr)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8092 :tag("streamhost-used",{jid=e.streamhosts[e.current_host].jid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8093 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8094 end,100);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8095 i();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8096 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8097 function e:refuse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8098 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8099 t:event("proxy65/request",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8100 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8101 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8102 function n:new(t,n)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8103 local e=a.new(nil,{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8104 target_jid=t;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8105 bytestream_sid=h();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8106 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8107 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
8108 :tag("query",{xmlns=i,mode="tcp",sid=e.bytestream_sid});
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8109 for t,e in ipairs(n or self.proxies)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8110 o:tag("streamhost",e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8111 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8112 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
8113 if o.attr.type=="error"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8114 local t,a,o=o:get_error();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8115 e:event("connection-failed",{conn=e,type=t,condition=a,text=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8116 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8117 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
8118 e.streamhost_jid=o.attr.jid;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8119 local h,o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8120 for a,t in ipairs(n or self.proxies)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8121 if t.jid==e.streamhost_jid then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8122 h,o=t.host,t.port;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8123 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8125 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8126 e:connect(h,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8127 local function o()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8128 e:unhook("connected",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8129 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
8130 :tag("query",{xmlns=i,sid=e.bytestream_sid})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8131 :tag("activate"):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8132 self.stream:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8133 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8134 e:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8135 end
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 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8138 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8139 e:hook("connected",o,100);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8140 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
8141 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8142 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8143 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8144 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8145 function s(i,e,t,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8146 local t=r(t..a..o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8147 local function a()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8148 e:unhook("connected",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8149 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8150 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8151 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8152 e:unhook("incoming-raw",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8153 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8154 return e:event("error","connection-failure");
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 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8157 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8158 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8159 local function i(a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8160 e:unhook("incoming-raw",i);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8161 if a~="\005\000"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8162 local t="version-mismatch";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8163 if a:sub(1,1)=="\005"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8164 t="authentication-failure";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8165 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8166 return e:event("error",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8167 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8168 e:send(string.char(5,1,0,3,#t)..t.."\0\0");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8169 e:hook("incoming-raw",o,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8170 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8171 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8172 e:hook("connected",a,200);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8173 e:hook("incoming-raw",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8174 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8176 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8177 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
8178 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8179 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8180 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
8181 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8182 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8183 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8184 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8185 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8186 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8187 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8188 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8189 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8190 local i=require"util.encodings".base64;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8191 local h=require"util.id".short;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8192 local n="urn:xmpp:jingle:transports:ibb:1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8193 local o="http://jabber.org/protocol/ibb";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8194 assert(i.encode("This is a test.")=="VGhpcyBpcyBhIHRlc3Qu","Base64 encoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8195 assert(i.decode("VGhpcyBpcyBhIHRlc3Qu")=="This is a test.","Base64 decoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8196 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8197 local t={__index=a};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8198 local function s(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8199 local t=setmetatable({stream=a},t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8200 t=e.eventable(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8201 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8202 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8203 function a:initiate(t,e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8204 self.block=2048;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8205 self.stanza=a or'iq';
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8206 self.peer=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8207 self.sid=e or tostring(self):match("%x+$");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8208 self.iseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8209 self.oseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8210 local e=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8211 return self:feed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8212 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8213 self.feeder=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8214 print("Hooking incoming IQs");
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8215 local t=self.stream;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8216 t:hook("iq/"..o,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8217 if a=="message"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8218 t:hook("message",e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8219 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8220 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8221 function a:open(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8222 self.stream:send_iq(e.iq{to=self.peer,type="set"}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8223 :tag("open",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8224 xmlns=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8225 ["block-size"]=self.block,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8226 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8227 stanza=self.stanza
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8228 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8229 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8230 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8231 if e.attr.type~="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8232 t(true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8233 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8234 t(false,e:get_error())
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8235 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8236 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8237 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8238 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8239 function a:send(n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8240 local a=self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8241 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8242 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8243 t=e.iq{type="set",to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8244 elseif a=="message"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8245 t=e.message{to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8246 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8247 local e=self.oseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8248 self.oseq=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8249 t:tag("data",{xmlns=o,sid=self.sid,seq=e})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8250 :text(i.encode(n));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8251 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8252 self.stream:send_iq(t,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8253 self:event(e.attr.type=="result"and"drained"or"error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8254 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8255 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8256 stream:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8257 self:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8258 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8259 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8260 function a:feed(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8261 if t.attr.from~=self.peer then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8262 local a=t[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8263 if a.attr.sid~=self.sid then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8264 local n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8265 if a.name=="open"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8266 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8267 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8268 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8269 elseif a.name=="data"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8270 local o=t:get_child_text("data",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8271 local a=tonumber(a.attr.seq);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8272 local n=self.iseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8273 if o and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8274 if a~=n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8275 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
8276 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8277 self:event("error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8278 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8279 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8280 self.iseq=a+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8281 local a=i.decode(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8282 if self.stanza=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8283 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8284 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8285 self:event("incoming-raw",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8286 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8287 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8288 elseif a.name=="close"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8289 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8290 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8291 return true
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8294 function a:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8295 self.stream:unhook("iq/"..o,self.feeder)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8296 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8297 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8298 function e.plugins.jingle_ibb(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8299 a:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8300 a:add_disco_feature(n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8301 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8302 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8303 function t:_setup()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8304 local e=s(self.stream);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8305 e.sid=self.sid or e.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8306 e.stanza=self.stanza or e.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8307 e.block=self.block or e.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8308 e:initiate(self.peer,self.sid,self.stanza);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8309 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8310 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8311 function t:generate_initiate()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8312 print("ibb:generate_initiate() as "..self.role);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8313 local t=h();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8314 self.sid=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8315 self.stanza='iq';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8316 self.block=2048;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8317 local e=e.stanza("transport",{xmlns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8318 sid=self.sid,stanza=self.stanza,["block-size"]=self.block});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8319 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8320 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8321 function t:generate_accept(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8322 print("ibb:generate_accept() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8323 local e=t.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8324 self.sid=e.sid or self.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8325 self.stanza=e.stanza or self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8326 self.block=e["block-size"]or self.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8327 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8328 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8329 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8330 function t:connect(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8331 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8332 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8333 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8334 local e=self.conn;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8335 print("ibb:connect() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8336 if self.role=="initiator"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8337 e:open(function(a,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8338 assert(a,table.concat({...},", "));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8339 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8340 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8341 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8342 t(e);
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 function t:info_received(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8346 print("ibb:info_received()");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8347 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8348 function t:disconnect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8349 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8350 self.conn:close()
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8353 function t:handle_accepted(e)end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8354 local t={__index=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8355 a:hook("jingle/transport/"..n,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8356 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8357 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8358 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8359 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8360 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8361 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8362 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8363 end
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 package.preload['verse.plugins.pubsub']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8366 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8367 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8368 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
8369 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8370 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8371 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8372 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8373 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8374 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8375 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8376 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8377 local i=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8378 local h=table.insert;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8379 local o="http://jabber.org/protocol/pubsub";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8380 local s="http://jabber.org/protocol/pubsub#owner";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8381 local r="http://jabber.org/protocol/pubsub#event";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8382 local e={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8383 local n={__index=e};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8384 function i.plugins.pubsub(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8385 e.pubsub=setmetatable({stream=e},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8386 e:hook("message",function(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8387 local a=t.attr.from;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8388 for t in t:childtags("event",r)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8389 local t=t:get_child("items");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8390 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8391 local o=t.attr.node;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8392 for t in t:childtags("item")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8393 e:event("pubsub/event",{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8394 from=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8395 node=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8396 item=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8397 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8398 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8399 for t in t:childtags("retract")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8400 e:event("pubsub/retraction",{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8401 from=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8402 node=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8403 item=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8404 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8405 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8406 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8407 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8408 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8409 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8410 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8411 function e:create(a,e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8412 return self:service(a):node(e):create(nil,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8413 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8414 function e:subscribe(o,t,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8415 return self:service(o):node(t):subscribe(a,nil,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8416 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8417 function e:publish(e,t,o,a,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8418 return self:service(e):node(t):publish(o,nil,a,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8419 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8420 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8421 local t={__index=a};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8422 function e:service(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8423 return setmetatable({stream=self.stream,service=e},t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8424 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8425 local function t(d,r,e,n,h,s,t,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8426 local e=i.iq{type=d or"get",to=r}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8427 :tag("pubsub",{xmlns=e or o})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8428 local o={node=h,jid=s};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8429 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8430 for t,e in pairs(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8431 o[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8432 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8433 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8434 if n then e:tag(n,o);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8435 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8436 e:tag("item",{id=t~=true and t or nil});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8437 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8438 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8439 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8440 function a:subscriptions(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8441 self.stream:send_iq(t(nil,self.service,nil,"subscriptions")
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8442 ,a and function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8443 if e.attr.type=="result"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8444 local e=e:get_child("pubsub",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8445 local e=e and e:get_child("subscriptions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8446 local o={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8447 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8448 for e in e:childtags("subscription")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8449 local t=self:node(e.attr.node)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8450 t.subscription=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8451 t.subscribed_jid=e.attr.jid;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8452 h(o,t);
12
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8455 a(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8456 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8457 a(false,e:get_error());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8458 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8459 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8460 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8461 function a:affiliations(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8462 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
8463 ,a and function(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8464 if e.attr.type=="result"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8465 local e=e:get_child("pubsub",o);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8466 local e=e and e:get_child("affiliations")or{};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8467 local o={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8468 if e then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8469 for e in e:childtags("affiliation")do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8470 local t=self:node(e.attr.node)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8471 t.affiliation=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8472 h(o,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8473 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8474 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8475 a(o);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8476 else
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8477 a(false,e:get_error());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8478 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8479 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8480 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8481 function a:nodes(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8482 self.stream:disco_items(self.service,nil,function(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8483 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8484 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8485 e[t]=self:node(e[t].node);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8486 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8487 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8488 a(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8489 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8490 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8491 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8492 local o={__index=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8493 function a:node(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8494 return setmetatable({stream=self.stream,service=self.service,node=e},o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8495 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8496 function n:__call(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8497 local t=self:service(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8498 return e and t:node(e)or t;
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 function e:hook(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8501 self._hooks=self._hooks or setmetatable({},{__mode='kv'});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8502 local function t(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8503 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
8504 return a(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8505 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8506 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8507 self._hooks[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8508 self.stream:hook("pubsub/event",t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8509 return t;
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 function e:unhook(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8512 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8513 local e=self._hooks[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8514 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8515 elseif self._hooks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8516 for e in pairs(self._hooks)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8517 self.stream:unhook("pubsub/event",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 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8521 function e:create(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8522 if e~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8523 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8524 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8525 self.stream:send_iq(t("set",self.service,nil,"create",self.node),a);
12
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8528 function e:configure(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8529 if e~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8530 error("Not implemented yet.");
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 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
8533 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8534 function e:publish(i,a,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8535 if a~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8536 error("Node configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8537 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8538 self.stream:send_iq(t("set",self.service,nil,"publish",self.node,nil,i or true)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8539 :add_child(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8540 ,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8541 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8542 function e:subscribe(e,a,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8543 e=e or self.stream.jid;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8544 if a~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8545 error("Subscription configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8546 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8547 self.stream:send_iq(t("set",self.service,nil,"subscribe",self.node,e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8548 ,o);
12
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 function e:subscription(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8551 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8552 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8553 function e:affiliation(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8554 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8556 function e:unsubscribe(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8557 e=e or self.subscribed_jid or self.stream.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8558 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
8559 ,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8560 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8561 function e:configure_subscription(e,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8562 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8563 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8564 function e:items(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8565 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8566 return self:item(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8567 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8568 self.stream:disco_items(self.service,self.node,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8569 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8570 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8571 function e:item(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8572 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
8573 ,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8574 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8575 function e:retract(o,e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8576 if type(e)=="function"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8577 e,a=false,e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8578 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8579 self.stream:send_iq(
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8580 t(
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8581 "set",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8582 self.service,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8583 nil,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8584 "retract",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8585 self.node,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8586 nil,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8587 o,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8588 {notify=e and"1"or nil}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8589 ),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8590 a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8591 );
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8592 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8593 function e:purge(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8594 self.stream:send_iq(
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8595 t(
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8596 "set",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8597 self.service,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8598 s,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8599 "purge",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8600 self.node,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8601 nil,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8602 nil,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8603 {notify=e and"1"or nil}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8604 ),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8605 a
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8606 );
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8607 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8608 function e:delete(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8609 assert(not e,"Not implemented yet.");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8610 self.stream:send_iq(t("set",self.service,s,"delete",self.node)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8611 ,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8612 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8613 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8614 package.preload['verse.plugins.pep']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8615 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8616 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8617 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
8618 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8619 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8620 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8621 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8622 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8623 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8624 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8625 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8626 local t=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8627 local e="http://jabber.org/protocol/pubsub";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8628 local e=e.."#event";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8629 function t.plugins.pep(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8630 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8631 e:add_plugin("pubsub");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8632 e.pep={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8633 e:hook("pubsub/event",function(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8634 return e:event("pep/"..t.node,{from=t.from,id=t.item.attr.id,item=t.item.tags[1]});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8635 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8636 function e:hook_pep(t,i,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8637 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8638 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8639 e:add_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8640 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8641 e:hook("pep/"..t,i,o);
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 function e:unhook_pep(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8644 e:unhook("pep/"..t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8645 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8646 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8647 e:remove_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8648 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8649 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8650 function e:publish_pep(t,a,o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8651 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
8652 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8653 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8654 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8655 package.preload['verse.plugins.adhoc']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8656 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8657 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8658 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
8659 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8660 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8661 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8662 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8663 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8664 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8665 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8666 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8667 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8668 local n=require"lib.adhoc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8669 local t="http://jabber.org/protocol/commands";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8670 local r="jabber:x:data";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8671 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8672 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8673 local i={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8674 function o.plugins.adhoc(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8675 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8676 e:add_disco_feature(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8677 function e:query_commands(a,o)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8678 e:disco_items(a,t,function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8679 e:debug("adhoc list returned")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8680 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8681 for o,a in ipairs(a)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8682 t[a.node]=a.name;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8683 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8684 e:debug("adhoc calling callback")
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8685 return o(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8686 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8687 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8688 function e:execute_command(o,i,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8689 local e=setmetatable({
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8690 stream=e,jid=o,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8691 command=i,callback=t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8692 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8693 return e:execute();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8694 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8695 local function s(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8696 if not(e)or e=="user"then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8697 if type(e)=="function"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8698 return e(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8699 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8700 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8701 function e:add_adhoc_command(o,a,h,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8702 i[a]=n.new(o,a,h,s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8703 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
8704 return i[a];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8705 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8706 local function h(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8707 local a=t.tags[1];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8708 local a=a.attr.node;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8709 local a=i[a];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8710 if not a then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8711 if not s(t.attr.from,a.permission)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8712 e:send(o.error_reply(t,"auth","forbidden","You don't have permission to execute this command"):up()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8713 :add_child(a:cmdtag("canceled")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8714 :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
8715 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8716 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8717 return n.handle_cmd(a,{send=function(t)return e:send(t)end},t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8718 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8719 e:hook("iq/"..t,function(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8720 local t=e.attr.type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8721 local a=e.tags[1].name;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8722 if t=="set"and a=="command"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8723 return h(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8724 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8725 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8726 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8727 function a:_process_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8728 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8729 self.status="canceled";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8730 self.callback(self,{});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8731 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8732 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8733 local e=e:get_child("command",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8734 self.status=e.attr.status;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8735 self.sessionid=e.attr.sessionid;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8736 self.form=e:get_child("x",r);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8737 self.note=e:get_child("note");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8738 self.callback(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8739 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8740 function a:execute()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8741 local e=o.iq({to=self.jid,type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8742 :tag("command",{xmlns=t,node=self.command});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8743 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8744 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8745 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8746 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8747 function a:next(e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8748 local t=o.iq({to=self.jid,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8749 :tag("command",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8750 xmlns=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8751 node=self.command,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8752 sessionid=self.sessionid
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8753 });
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8754 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
8755 self.stream:send_iq(t,function(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8756 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8757 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8758 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8759 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8760 package.preload['verse.plugins.presence']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8761 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8762 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8763 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
8764 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8765 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8766 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8767 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8768 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8769 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8770 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8771 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8772 local a=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8773 local o=require"util.stanza";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8774 function a.plugins.presence(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8775 t.last_presence=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8776 t:hook("presence-out",function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8777 if not e.attr.to then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8778 t.last_presence=o.clone(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8779 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8780 end,1);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8781 function t:resend_presence()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8782 if self.last_presence then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8783 t:send(self.last_presence);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8784 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8785 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8786 function t:set_status(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8787 local a=a.presence();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8788 if type(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8789 if e.show then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8790 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
8791 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8792 if e.priority or e.prio then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8793 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
8794 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8795 if e.status or e.msg then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8796 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
8797 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8798 elseif type(e)=="string"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8799 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
8800 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8801 t:send(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8802 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8803 end
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 package.preload['verse.plugins.private']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8806 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8807 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8808 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
8809 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8810 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8811 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8812 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8813 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8814 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8815 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8816 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8817 local t=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8818 local a="jabber:iq:private";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8819 function t.plugins.private(o)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8820 function o:private_set(i,o,e,n)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8821 local t=t.iq({type="set"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8822 :tag("query",{xmlns=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8823 if e then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8824 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
8825 t:add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8826 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8827 t:tag(i,{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8828 :add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8829 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8830 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8831 self:send_iq(t,n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8832 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8833 function o:private_get(e,o,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8834 self:send_iq(t.iq({type="get"})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8835 :tag("query",{xmlns=a})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8836 :tag(e,{xmlns=o}),
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8837 function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8838 if t.attr.type=="result"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8839 local t=t:get_child("query",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8840 local e=t:get_child(e,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8841 i(e);
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 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8844 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8845 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8846 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8847 package.preload['verse.plugins.roster']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8848 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8849 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8850 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
8851 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8852 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8853 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8854 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8855 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8856 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8857 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8858 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8859 local i=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8860 local l=require"util.jid".bare;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8861 local a="jabber:iq:roster";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8862 local o="urn:xmpp:features:rosterver";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8863 local n=table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8864 function i.plugins.roster(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8865 local h=false;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8866 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8867 items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8868 ver="";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8869 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8870 t.roster=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8871 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
8872 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
8873 h=true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8874 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8875 end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8876 local function s(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8877 local t=i.stanza("item",{xmlns=a});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8878 for a,e in pairs(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8879 if a~="groups"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8880 t.attr[a]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8881 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8882 for a=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8883 t:tag("group"):text(e[a]):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8884 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8885 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8886 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8887 return t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8888 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8889 local function d(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8890 local e={};
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8891 local t={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8892 e.groups=t;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8893 for t,a in pairs(a.attr)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8894 if t~="xmlns"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8895 e[t]=a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8896 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8897 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8898 for e in a:childtags("group")do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8899 n(t,e:get_text())
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8900 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8901 return e;
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 function e:load(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8904 e.ver,e.items=t.ver,t.items;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8905 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8906 function e:dump()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8907 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8908 ver=e.ver,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8909 items=e.items,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8910 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8911 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8912 function e:add_contact(h,o,n,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8913 local o={jid=h,name=o,groups=n};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8914 local a=i.iq({type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8915 :tag("query",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8916 :add_child(s(o));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8917 t:send_iq(a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8918 if not e then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8919 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8920 e(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8921 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8922 e(nil,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8923 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8924 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8925 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8926 function e:delete_contact(o,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8927 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
8928 local h={jid=o,subscription="remove"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8929 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
8930 t:send_iq(i.iq({type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8931 :tag("query",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8932 :add_child(s(h)),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8933 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8934 if not n then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8935 if e.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8936 n(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8937 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8938 n(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8939 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8940 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8941 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8942 local function r(t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8943 local t=d(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8944 e.items[t.jid]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8945 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8946 local function d(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8947 local a=e.items[t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8948 e.items[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8949 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8950 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8951 function e:fetch(o)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8952 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
8953 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8954 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8955 local t=t:get_child("query",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8956 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8957 e.items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8958 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
8959 r(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8960 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8961 e.ver=t.attr.ver or"";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8962 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8963 o(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8964 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8965 o(nil,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8966 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8967 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8968 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8969 t:hook("iq/"..a,function(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8970 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
8971 if s=="set"and(not n or n==l(t.jid))then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8972 local s=o:get_child("query",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8973 local n=s and s:get_child("item");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8974 if n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8975 local o,a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8976 local i=n.attr.jid;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8977 if n.attr.subscription=="remove"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8978 o="removed"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8979 a=d(i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8980 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8981 o=e.items[i]and"changed"or"added";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8982 r(n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8983 a=e.items[i];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8984 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8985 e.ver=s.attr.ver;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8986 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
8987 t:event("roster/item-"..o,a);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8988 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8989 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8990 t:send(i.reply(o))
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8991 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8992 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8993 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8994 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8995 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8996 package.preload['verse.plugins.register']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8997 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8998 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8999 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
9000 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9001 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9002 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9003 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9004 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9005 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9006 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9007 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9008 local t=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9009 local i="jabber:iq:register";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9010 function t.plugins.register(e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9011 local function a(o)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9012 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
9013 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
9014 :tag("query",{xmlns=i})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9015 :tag("username"):text(e.username):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9016 :tag("password"):text(e.password):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9017 if e.register_email then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9018 t:tag("email"):text(e.register_email):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9019 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9020 e:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9021 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9022 e:event("registration-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9023 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9024 local a,t,o=t:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9025 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
9026 e:event("registration-failure",{type=a,condition=t,text=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9027 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9028 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9029 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9030 e:debug("In-band registration not offered by server");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9031 e:event("registration-failure",{condition="service-unavailable"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9032 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9033 e:unhook("stream-features",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9034 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9035 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9036 e:hook("stream-features",a,310);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9037 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9038 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9039 package.preload['verse.plugins.groupchat']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9040 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9041 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9042 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
9043 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9044 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9045 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9046 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9047 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9048 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9049 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9050 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9051 local i=require"verse";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9052 local e=require"util.events";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9053 local n=require"util.jid";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9054 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9055 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9056 local h="urn:xmpp:delay";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9057 local s="http://jabber.org/protocol/muc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9058 function i.plugins.groupchat(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9059 o:add_plugin("presence")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9060 o.rooms={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9061 o:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9062 local a=n.bare(e.attr.from);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9063 if not a then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9064 local t=o.rooms[a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9065 if not t and e.attr.to and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9066 t=o.rooms[e.attr.to.." "..a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9067 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9068 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
9069 if t then
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9070 local o=select(3,n.split(e.attr.from));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9071 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
9072 local i=e:get_child("delay",h);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9073 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9074 room_jid=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9075 room=t;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9076 sender=t.occupants[o];
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9077 nick=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9078 body=n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9079 stanza=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9080 delay=(i and i.attr.stamp);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9081 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9082 local t=t:event(e.name,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9083 return t or(e.name=="message")or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9084 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9085 end,500);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9086 function o:join_room(n,h,t,r)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9087 if not h then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9088 return false,"no nickname supplied"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9089 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9090 t=t or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9091 local e=setmetatable(i.eventable{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9092 stream=o,jid=n,nick=h,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9093 subject=nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9094 occupants={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9095 opts=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9096 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9097 if t.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9098 self.rooms[t.source.." "..n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9099 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9100 self.rooms[n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9101 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9102 local a=e.occupants;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9103 e:hook("presence",function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9104 local t=o.nick or h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9105 if not a[t]and o.stanza.attr.type~="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9106 a[t]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9107 nick=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9108 jid=o.stanza.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9109 presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9110 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9111 local o=o.stanza:get_child("x",s.."#user");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9112 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9113 local e=o:get_child("item");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9114 if e and e.attr then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9115 a[t].real_jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9116 a[t].affiliation=e.attr.affiliation;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9117 a[t].role=e.attr.role;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9118 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9119 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9120 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9121 e.stream:event("groupchat/joined",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9122 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9123 e:event("occupant-joined",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9125 elseif a[t]and o.stanza.attr.type=="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9126 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9127 e.stream:event("groupchat/left",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9128 if e.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9129 self.rooms[e.opts.source.." "..n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9130 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9131 self.rooms[n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9132 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9133 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9134 a[t].presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9135 e:event("occupant-left",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9136 a[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9137 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9138 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9139 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9140 e:hook("message",function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9141 local t=a.stanza:get_child_text("subject");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9142 if not t then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9143 t=#t>0 and t or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9144 if t~=e.subject then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9145 local o=e.subject;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9146 e.subject=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9147 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
9148 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9149 end,2e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9150 local t=i.presence():tag("x",{xmlns=s}):reset();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9151 if r then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9152 t:get_child("x",s):tag("password"):text(r):reset();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9153 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9154 self:event("pre-groupchat/joining",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9155 e:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9156 self:event("groupchat/joining",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9157 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9158 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9159 o:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9160 if not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9161 for a,t in pairs(o.rooms)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9162 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9163 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9164 e.attr.to=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9165 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9166 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9167 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9168 function a:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9169 if e.name=="message"and not e.attr.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9170 e.attr.type="groupchat";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9171 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9172 if e.name=="presence"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9173 e.attr.to=self.jid.."/"..self.nick;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9174 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9175 if e.attr.type=="groupchat"or not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9176 e.attr.to=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9177 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9178 if self.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9179 e.attr.from=self.opts.source
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9180 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9181 self.stream:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9182 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9183 function a:send_message(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9184 self:send(i.message():tag("body"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9186 function a:set_subject(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9187 self:send(i.message():tag("subject"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9188 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9189 function a:leave(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9190 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
9191 local e=i.presence({type="unavailable"});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9192 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9193 e:tag("status"):text(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9194 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9195 self:send(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9196 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9197 function a:admin_set(e,t,a,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9198 self:send(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9199 :query(s.."#admin")
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9200 :tag("item",{nick=e,[t]=a})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9201 :tag("reason"):text(o or""));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9202 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9203 function a:set_role(a,e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9204 self:admin_set(a,"role",e,t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9205 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9206 function a:set_affiliation(t,a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9207 self:admin_set(t,"affiliation",a,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9208 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9209 function a:kick(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9210 self:set_role(t,"none",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9211 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9212 function a:ban(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9213 self:set_affiliation(e,"outcast",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9214 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9215 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9216 package.preload['verse.plugins.vcard']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9217 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9218 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9219 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
9220 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9221 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9222 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9223 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9224 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9225 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9226 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9227 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9228 local i=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9229 local o=require"util.vcard";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9230 local e="vcard-temp";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9231 function i.plugins.vcard(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9232 function a:get_vcard(n,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9233 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
9234 :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
9235 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
9236 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
9237 e=o.from_xep54(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9238 t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9239 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9240 t(false)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9241 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9242 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9244 function a:set_vcard(e,n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9245 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9246 if type(e)=="table"and e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9247 t=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9248 elseif type(e)=="string"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9249 t=o.to_xep54(o.from_text(e)[1]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9250 elseif type(e)=="table"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9251 t=o.to_xep54(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9252 error("Converting a table to vCard not implemented")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9253 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9254 if not t then return false end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9255 a:debug("setting vcard to %s",tostring(t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9256 a:send_iq(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9257 :add_child(t),n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9258 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9259 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9260 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9261 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
9262 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9263 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9264 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
9265 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9266 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9267 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9268 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9269 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9270 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9271 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9272 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9273 local n=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9274 local i="vcard-temp:x:update";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9275 local r=require("util.hashes").sha1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9276 local e,t=pcall(function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9277 local e=require("util.encodings").base64.decode;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9278 assert(e("SGVsbG8=")=="Hello")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9279 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9280 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9281 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9282 e,t=pcall(function()return require("mime").unb64;end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9283 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9284 error("Could not find a base64 decoder")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9285 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9286 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9287 local h=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9288 function n.plugins.vcard_update(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9289 e:add_plugin("vcard");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9290 e:add_plugin("presence");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9291 local t;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9292 local function s(a)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9293 local o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9294 for e=1,#a do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9295 if a[e].name=="PHOTO"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9296 o=a[e][1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9297 break
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9298 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9299 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9300 if o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9301 local a=r(h(o),true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9302 t=n.stanza("x",{xmlns=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9303 :tag("photo"):text(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9304 e:resend_presence()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9305 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9306 t=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9307 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9308 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9309 local a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9310 e:hook("ready",function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9311 if a then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9312 a=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9313 e:get_vcard(nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9314 if t then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9315 s(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9317 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9318 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9319 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9320 end,3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9321 e:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9322 if t and not e:get_child("x",i)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9323 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9324 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9325 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9326 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9327 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9328 package.preload['verse.plugins.carbons']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9329 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9330 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9331 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
9332 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9333 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9334 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9335 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9336 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9337 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9338 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9339 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9340 local o=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9341 local a="urn:xmpp:carbons:2";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9342 local n="urn:xmpp:forward:0";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9343 local h=os.time;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9344 local s=require"util.datetime".parse;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9345 local r=require"util.jid".bare;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9346 function o.plugins.carbons(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9347 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9348 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9349 e.carbons=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9350 function t:enable(i)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9351 e:send_iq(o.iq{type="set"}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9352 :tag("enable",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9353 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9354 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9355 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9356 t.enabled=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9357 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9358 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9359 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9360 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9361 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9362 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9363 function t:disable(i)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9364 e:send_iq(o.iq{type="set"}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9365 :tag("disable",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9366 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9367 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9368 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9369 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9370 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9371 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9372 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9373 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9374 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9375 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9376 local i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9377 e:hook("bind-success",function()
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9378 i=r(e.jid);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9379 end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9380 e:hook("message",function(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9381 local t=o:get_child(nil,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9382 if o.attr.from==i and t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9383 local o=t.name;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9384 local t=t:get_child("forwarded",n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9385 local a=t and t:get_child("message","jabber:client");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9386 local t=t:get_child("delay","urn:xmpp:delay");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9387 local t=t and t.attr.stamp;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9388 t=t and s(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9389 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9390 return e:event("carbon",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9391 dir=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9392 stanza=a,
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9393 timestamp=t or h(),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9394 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9395 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9396 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9397 end,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9398 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9399 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9400 package.preload['verse.plugins.archive']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9401 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9402 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9403 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
9404 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9405 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9406 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9407 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9408 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9409 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9410 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9411 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9412 local a=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9413 local t=require"util.stanza";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9414 local e="urn:xmpp:mam:2"
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9415 local c="urn:xmpp:forward:0";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9416 local u="urn:xmpp:delay";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9417 local i=require"util.id".short;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9418 local m=require"util.datetime".parse;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9419 local r=require"util.datetime".datetime;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9420 local o=require"util.dataforms".new;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9421 local h=require"util.rsm";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9422 local d={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9423 local l=o{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9424 {name="FORM_TYPE";type="hidden";value=e;};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9425 {name="with";type="jid-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9426 {name="start";type="text-single"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9427 {name="end";type="text-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9428 };
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9429 function a.plugins.archive(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9430 function o:query_archive(o,a,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9431 local i=i();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9432 local o=t.iq{id=i,type="set",to=o}
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9433 :tag("query",{xmlns=e,queryid=i});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9434 local t,s=tonumber(a["start"]),tonumber(a["end"]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9435 a["start"]=t and r(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9436 a["end"]=s and r(s);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9437 o:add_child(l:form(a,"submit"));
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9438 o:add_child(h.generate(a));
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9439 local t={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9440 local function s(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9441 local e=a:get_child("result",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9442 if e and e.attr.queryid==i then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9443 local a=e:get_child("forwarded",c);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9444 local i=e.attr.id;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9445 local e=a:get_child("delay",u);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9446 local o=e and m(e.attr.stamp)or nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9447 local e=a:get_child("message","jabber:client")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9448 t[#t+1]={id=i,stamp=o,message=e};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9449 return true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9450 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9451 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9452 self:hook("message",s,1);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9453 self:send_iq(o,function(a)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9454 self:unhook("message",s);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9455 if a.attr.type=="error"then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9456 self:warn(table.concat({a:get_error()}," "))
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9457 n(false,a:get_error())
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9458 return true;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9459 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9460 local e=a:get_child("fin",e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9461 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9462 t.complete=e.attr.complete=="true"or e.attr.complete=="1";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9463 local e=h.get(e);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9464 for e,a in pairs(e or d)do t[e]=a;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9465 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9466 n(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9467 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9468 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9469 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9470 local i={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9471 always=true,[true]="always",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9472 never=false,[false]="never",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9473 roster="roster",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9474 }
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9475 local function n(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9476 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9477 local a=t.attr.default;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9478 if a then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9479 e[false]=i[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9480 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9481 local a=t:get_child("always");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9482 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9483 for t in a:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9484 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9485 e[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9486 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9487 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9488 local t=t:get_child("never");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9489 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9490 for t in t:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9491 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9492 e[t]=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9493 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9494 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9495 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9496 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9497 local function s(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9498 local a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9499 a,o[false]=o[false],nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9500 if a~=nil then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9501 a=i[a];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9502 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9503 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
9504 local a=t.stanza("always");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9505 local e=t.stanza("never");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9506 for t,o in pairs(o)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9507 (o and a or e):tag("jid"):text(t):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9508 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9509 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
9510 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9511 function o:archive_prefs_get(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9512 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
9513 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9514 if e and e.attr.type=="result"and e.tags[1]then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9515 local t=n(e.tags[1]);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9516 a(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9517 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9518 a(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9519 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9520 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9521 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9522 function o:archive_prefs_set(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9523 self:send_iq(t.iq{type="set"}:add_child(s(e)),a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9524 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9525 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9526 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9527 package.preload['verse.plugins.browsing']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9528 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9529 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9530 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9531 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9532 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9533 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9534 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9535 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9536 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9537 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9538 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9539 local a=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9540 local o="urn:xmpp:browsing:0";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9541 function a.plugins.browsing(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9542 e:add_plugin("pep");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9543 function e:browsing(t,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9544 if type(t)=="string"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9545 t={uri=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9546 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9547 local a=a.stanza("page",{xmlns=o})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9548 for e,t in pairs(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9549 a:tag(e):text(t):up();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9550 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9551 return e:publish_pep(a,i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9552 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9553 e:hook_pep(o,function(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9554 local t=a.item;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9555 return e:event("browsing",{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9556 from=a.from;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9557 description=t:get_child_text"description";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9558 keywords=t:get_child_text"keywords";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9559 title=t:get_child_text"title";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9560 uri=t:get_child_text"uri";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9561 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9562 end);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9563 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9564 end)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9565 package.preload['util.http']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9566 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9567 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9568 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
9569 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9570 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9571 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9572 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9573 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9574 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9575 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9576 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9577 local n,t=string.format,string.char;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9578 local r,h=pairs,ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9579 local i,o=table.insert,table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9580 local e={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9581 for a=0,255 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9582 local t=t(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9583 local a=n("%%%02x",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9584 e[t]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9585 e[a]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9586 e[a:upper()]=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9587 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9588 local function n(t)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9589 return t and(t:gsub("[^a-zA-Z0-9.~_-]",e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9590 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9591 local function a(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9592 return t and(t:gsub("%%%x%x",e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9593 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9594 local function e(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9595 return e and(n(e):gsub("%%20","+"));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9596 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9597 local function s(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9598 local t={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9599 if a[1]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9600 for o,a in h(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9601 i(t,e(a.name).."="..e(a.value));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9602 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9603 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9604 for a,o in r(a)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9605 i(t,e(a).."="..e(o));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9606 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9607 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9608 return o(t,"&");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9609 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9610 local function h(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9611 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
9612 local o={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9613 for t,e in e:gmatch("([^=&]*)=([^&]*)")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9614 t,e=t:gsub("%+","%%20"),e:gsub("%+","%%20");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9615 t,e=a(t),a(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9616 i(o,{name=t,value=e});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9617 o[t]=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9618 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9619 return o;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9620 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9621 local function i(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9622 e=","..e:gsub("[ \t]",""):lower()..",";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9623 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
9624 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9625 local function o(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9626 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9627 if e:sub(-1,-1)~="/"then e=e.."/";end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9628 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9629 if e:sub(-1,-1)=="/"then e=e:sub(1,-2);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9630 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9631 if e:sub(1,1)~="/"then e="/"..e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9632 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9633 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9634 return{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9635 urlencode=n,urldecode=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9636 formencode=s,formdecode=h;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9637 contains_token=i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9638 normalize_path=o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9639 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9640 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9641 package.preload['net.http.parser']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9642 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9643 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9644 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
9645 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9646 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9647 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9648 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9649 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9650 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9651 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9652 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9653 local u=tonumber;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9654 local g=assert;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9655 local z=require"socket.url".parse;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9656 local t=require"util.http".urldecode;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9657 local j=require"util.dbuffer";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9658 local function x(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9659 e=t((e:gsub("//+","/")));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9660 if e:sub(1,1)~="/"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9661 e="/"..e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9662 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9663 local t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9664 for e in e:gmatch("([^/]+)/")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9665 if e==".."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9666 t=t-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9667 elseif e~="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9668 t=t+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9669 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9670 if t<0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9671 return nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9672 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9673 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9674 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9675 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9676 local q={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9677 function q.new(l,s,e,h)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9678 local f=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9679 if not e or e=="server"then f=false;else g(e=="client","Invalid parser type");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9680 local v=u(h and h().body_size_limit)or 10*1024*1024;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9681 local n=u(h and h().head_size_limit)or 10*1024;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9682 local k=u(h and h().buffer_size_limit)or v*2;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9683 local a=j.new(k);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9684 local d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9685 local r=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9686 local e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9687 local t;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9688 local w;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9689 local o;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9690 return{
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9691 feed=function(c,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9692 if o then return nil,"parse has failed";end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9693 if not i then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9694 if r and f and not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9695 a:collapse();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9696 e.body=a:read_chunk()or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9697 e.partial=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9698 l(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9699 r=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9700 elseif a:length()~=0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9701 o=true;return s("unexpected-eof");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9702 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9703 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9704 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9705 if not a:write(i)then o=true;return s("max-buffer-size-exceeded");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9706 while a:length()>0 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9707 if r==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9708 local b=a:sub(1,n):find("\r\n\r\n",nil,true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9709 if not b then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9710 local p,c,m,i,g;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9711 local y;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9712 local n={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9713 for t in a:read(b+3):gmatch("([^\r\n]+)\r\n")do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9714 if y then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9715 local e,t=t:match("^([^%s:]+): *(.*)$");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9716 if not e then o=true;return s("invalid-header-line");end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9717 e=e:lower();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9718 n[e]=n[e]and n[e]..","..t or t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9719 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9720 y=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9721 if f then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9722 m,i,g=t:match("^HTTP/(1%.[01]) (%d%d%d) (.*)$");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9723 i=u(i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9724 if not i then o=true;return s("invalid-status-line");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9725 w=not
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9726 ((h and h().method=="HEAD")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9727 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
9728 or(i>=100 and i<200));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9729 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9730 p,c,m=t:match("^(%w+) (%S+) HTTP/(1%.[01])$");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9731 if not p then o=true;return s("invalid-status-line");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9732 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9733 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9734 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9735 if not y then o=true;return s("invalid-status-line");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9736 d=w and n["transfer-encoding"]=="chunked";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9737 t=u(n["content-length"]);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9738 if f then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9739 if not w then t=0;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9740 e={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9741 code=i;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9742 httpversion=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9743 headers=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9744 body=false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9745 body_length=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9746 chunked=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9747 partial=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9748 responseversion=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9749 responseheaders=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9750 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9751 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9752 local a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9753 if c:byte()==47 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9754 local t,e=c:match("([^?]*).?(.*)");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9755 if e==""then e=nil;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9756 a={path=t,query=e};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9757 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9758 a=z(c);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9759 if not(a and a.path)then o=true;return s("invalid-url");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9760 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9761 c=x(a.path);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9762 n.host=a.host or n.host;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9763 t=t or 0;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9764 e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9765 method=p;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9766 url=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9767 path=c;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9768 httpversion=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9769 headers=n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9770 body=false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9771 body_sink=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9772 chunked=d;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9773 partial=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9774 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9775 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9776 if not t or t>v then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9777 l(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9778 if not e.body_sink and(t and t>v)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9779 o=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9780 return s("content-length-limit-exceeded");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9781 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9782 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9783 if d and not e.body_sink then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9784 l(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9785 if not e.body_sink then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9786 e.body_buffer=j.new(k);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9787 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9788 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9789 r=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9790 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9791 if r then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9792 if d then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9793 local n=a:sub(1,512);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9794 local t,i=n:match("^(%x+)[^\r\n]*\r\n()");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9795 if not t then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9796 t=t and u(t,16);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9797 if not t then o=true;return s("invalid-chunk-size");end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9798 if t==0 and n:find("\r\n\r\n",i-2,true)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9799 local t=e.body_buffer;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9800 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9801 e.body_buffer=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9802 t:collapse();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9803 e.body=t:read_chunk()or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9804 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9805 a:collapse();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9806 local t=a:read_chunk();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9807 t=t:gsub("^.-\r\n\r\n","");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9808 a:write(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9809 r,d=nil,nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9810 e.partial=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9811 l(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9812 elseif a:length()-i-1>=t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9813 a:discard(i-1);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9814 (e.body_sink or e.body_buffer):write(a:read(t));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9815 a:discard(2);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9816 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9817 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9818 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9819 elseif e.body_sink then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9820 local i=a:read_chunk(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9821 while i and(not t or t>0)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9822 if e.body_sink:write(i)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9823 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9824 t=t-#i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9825 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9826 i=a:read_chunk(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9827 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9828 o=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9829 return s("body-sink-write-failure");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9830 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9831 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9832 if t==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9833 r=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9834 e.partial=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9835 l(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9836 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9837 elseif not t or a:length()>=t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9838 g(not d)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9839 e.body=t and a:read(t)or a:read_chunk()or"";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9840 r=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9841 e.partial=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9842 l(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9843 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9844 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9845 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9846 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9847 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9848 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9849 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9850 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9851 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9852 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9853 return q;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9854 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9855 package.preload['net.http']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9856 local _ENV=_ENV;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9857 local function e(t,...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9858 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
9859 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9860 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9861 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9862 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9863 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9864 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9865 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9866 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9867 local O=require"util.encodings".base64.encode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9868 local A=require"socket.url"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9869 local E=require"net.http.parser".new;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9870 local d=require"util.http";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9871 local T=require"util.events";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9872 local _=require"util.x509".verify_identity;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9873 local k=require"util.promise";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9874 local g=require"net.http.errors";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9875 local b=require"net.resolvers.basic";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9876 local v=require"net.connect".connect;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9877 local y=pcall(require,"ssl");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9878 local s,f=table.insert,table.concat;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9879 local l=pairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9880 local p,c,t=
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9881 tonumber,tostring,debug.traceback;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9882 local q=os.time;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9883 local z=require"util.xpcall".xpcall;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9884 local w=error
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9885 local o=require"util.logger".init("http");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9886 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9887 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9888 local function x(e)return(c(e):match("%x+$"));end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9889 local i={default_port=80,default_mode="*a"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9890 local function j(e)o("error","Traceback[http]: %s",t(c(e),2));return e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9891 local function h(e,t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9892 if not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9893 o("error","Request '%s': error in callback: %s",e.id,(...));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9894 if not e.suppress_errors then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9895 w(...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9896 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9897 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9898 return...;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9899 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9900 local function r(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9901 local t=e.conn;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9902 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9903 e.conn=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9904 t:close()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9905 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9906 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9907 local function m(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9908 if e.callback then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9909 e.callback(t or"cancelled",0,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9910 e.callback=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9911 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9912 if e.conn then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9913 r(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9914 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9915 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9916 local function u(e,n,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9917 if not e.parser then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9918 local function i(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9919 if e.callback then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9920 e.callback(t or"connection-closed",0,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9921 e.callback=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9922 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9923 r(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9924 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9925 if not n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9926 i(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9927 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9928 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9929 local a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9930 local function n(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9931 if t.partial then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9932 o("debug","Request '%s': partial response (%s%s)",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9933 e.id,
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9934 t.chunked and"chunked, "or"",
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9935 t.body_length and("%d bytes"):format(t.body_length)or"unknown length"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9936 );
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9937 if e.streaming_handler then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9938 o("debug","Request '%s': Streaming via handler",e.id);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9939 t.body_sink,a=e.streaming_handler(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9940 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9941 return;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9942 elseif a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9943 o("debug","Request '%s': Finalizing response stream");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9944 a(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9945 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9946 if e.callback then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9947 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
9948 e.callback=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9949 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9950 r(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9951 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9952 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9953 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9954 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9955 e.parser=E(n,i,"client",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9956 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9957 e.parser:feed(n);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9958 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9959 function i.onconnect(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9960 local e=a[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9961 e.write=function(...)return e.conn:write(...);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9962 local r=e.callback;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9963 e.callback=function(i,a,n,s)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9964 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9965 local t={http=e.http,url=e.url,request=e,response=n,content=i,code=a,callback=e.callback};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9966 e.http.events.fire_event("response",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9967 i,a,n=t.content,t.code,t.response;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9968 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9969 o("debug","Request '%s': Calling callback, status %s",e.id,a or"---");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9970 return h(e.id,z(r,j,i,a,n,s));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9971 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9972 e.reader=u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9973 e.state="status";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9974 e.cancel=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9975 a[e.conn]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9976 if not e.insecure and t:ssl()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9977 local a=t:socket();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9978 local o=a.getpeerverification and a:getpeerverification();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9979 if not o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9980 e.callback("certificate-chain-invalid",0,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9981 e.callback=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9982 t:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9983 return;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9984 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9985 local a=a.getpeercertificate and a:getpeercertificate();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9986 if not a or not _(e.host,false,a)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9987 e.callback("certificate-verify-failed",0,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9988 e.callback=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9989 t:close();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9990 return;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9991 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9992 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9993 local a={e.method or"GET"," ",e.path," HTTP/1.1\r\n"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9994 if e.query then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9995 s(a,4,"?"..e.query);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9996 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9997 for e,t in l(e.headers)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9998 s(a,e..": "..t.."\r\n");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
9999 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10000 s(a,"\r\n")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10001 t:write(f(a));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10002 if e.body then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10003 t:write(e.body);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10004 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10005 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10006 function i.onincoming(t,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10007 local e=a[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10008 if not e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10009 o("warn","Received response from connection %s with no request attached!",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10010 return;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10011 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10012 if i and e.reader then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10013 e:reader(i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10014 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10015 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10016 function i.ondisconnect(t,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10017 local e=a[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10018 if e and e.conn then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10019 e:reader(nil,o or"closed");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10020 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10021 a[t]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10022 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10023 function i.onattach(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10024 a[e]=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10025 t.conn=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10026 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10027 function i.ondetach(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10028 a[e]=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10029 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10030 function i.onfail(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10031 e.http.events.fire_event("request-connection-error",{http=e.http,request=e,url=e.url,err=t});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10032 e.callback(t or"connection failed",0,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10033 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10034 local function f(a,s,t,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10035 local e=A.parse(s);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10036 if not(e and e.host)then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10037 n("invalid-url",0,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10038 return nil,"invalid-url";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10039 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10040 e.url=s;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10041 e.http=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10042 e.time=q();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10043 if not e.path then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10044 e.path="/";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10045 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10046 e.id=t and t.id or x(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10047 do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10048 local o={http=a,url=s,request=e,options=t,callback=n};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10049 local a=a.events.fire_event("pre-request",o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10050 if a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10051 return a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10052 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10053 e,s,t,e.callback=o.request,o.url,o.options,o.callback;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10054 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10055 local d,h,u;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10056 local m,n=e.host,e.port;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10057 local r=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10058 if(n=="80"and e.scheme=="http")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10059 or(n=="443"and e.scheme=="https")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10060 n=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10061 elseif n then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10062 r=r..":"..n;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10063 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10064 h={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10065 ["Host"]=r;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10066 ["User-Agent"]="Prosody XMPP Server";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10067 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10068 if e.userinfo then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10069 h["Authorization"]="Basic "..O(e.userinfo);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10070 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10071 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10072 e.onlystatus=t.onlystatus;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10073 u=t.body;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10074 if u then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10075 d="POST";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10076 h["Content-Length"]=c(#u);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10077 h["Content-Type"]="application/x-www-form-urlencoded";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10078 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10079 if t.method then d=t.method;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10080 if t.headers then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10081 for t,e in l(t.headers)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10082 h[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10083 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10084 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10085 e.insecure=t.insecure;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10086 e.suppress_errors=t.suppress_errors;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10087 e.streaming_handler=t.streaming_handler;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10088 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10089 o("debug","Making %s %s request '%s' to %s",e.scheme:upper(),d or"GET",e.id,(t and t.suppress_url and r)or s);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10090 e.method,e.headers,e.body=d,h,u;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10091 local o=e.scheme=="https";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10092 if o and not y then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10093 w("SSL not available, unable to contact https URL");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10094 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10095 local r=n and p(n)or(o and 443 or 80);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10096 local n=a.options and a.options.use_dane;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10097 local h=false;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10098 if o then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10099 h=t and t.sslctx or a.options and a.options.sslctx;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10100 if t and t.use_dane~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10101 n=t.use_dane;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10102 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10103 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10104 local t=b.new(m,r,"tcp",{servername=e.host;use_dane=n});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10105 v(t,i,{sslctx=h},e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10106 a.events.fire_event("request",{http=a,request=e,url=s});
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10107 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10108 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10109 local function e(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10110 local e={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10111 options=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10112 request=function(o,a,t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10113 if e~=nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10114 return f(o,a,t,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10115 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10116 return k.new(function(i,n)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10117 f(o,a,t,function(t,a,e,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10118 if a==0 then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10119 n(g.new(t,{request=e}));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10120 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10121 e.request=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10122 i(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10123 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10124 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10125 end);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10126 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10127 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10128 new=t and function(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10129 local a={};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10130 for e,t in l(t)do a[e]=t;end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10131 if o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10132 for t,e in l(o)do a[t]=e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10133 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10134 return e(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10135 end or e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10136 events=T.new();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10137 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10138 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10139 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10140 local t=e({
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10141 sslctx={mode="client",protocol="sslv23",options={"no_sslv2","no_sslv3"},alpn="http/1.1",verify="peer"};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10142 suppress_errors=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10143 });
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10144 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10145 request=function(e,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10146 return t:request(e,a,o);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10147 end;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10148 default=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10149 new=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10150 events=t.events;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10151 urlencode=d.urlencode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10152 urldecode=d.urldecode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10153 formencode=d.formencode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10154 formdecode=d.formdecode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10155 destroy_request=r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10156 features={
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10157 sni=true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10158 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10159 };
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10160 end)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10161 package.preload['util.x509']=(function(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10162 local _ENV=_ENV;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10163 local function e(t,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10164 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10165 package.loaded[t]=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10166 for t=1,select("#",...)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10167 (select(t,...))(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10168 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10169 _ENV=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10170 _M=e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10171 return e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10172 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10173 local o=require"util.encodings".stringprep.nameprep;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10174 local r=require"util.encodings".idna.to_ascii;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10175 local y=require"util.encodings".idna.to_unicode;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10176 local c=require"util.encodings".base64;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10177 local e=require"util.logger".init("x509");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10178 local p=require"util.multitable";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10179 local v=string.format;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10180 local d=ipairs;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10181 local _ENV=nil;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10182 local u="2.5.4.3";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10183 local h="2.5.29.17";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10184 local s="1.3.6.1.5.5.7.8.5";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10185 local n="1.3.6.1.5.5.7.8.7";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10186 local function l(o,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10187 local t=r(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10188 if t==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10189 e("info","Host %s failed IDNA ToASCII operation",o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10190 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10191 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10192 t=t:lower()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10193 local o=t:gsub("^[^.]+%.","")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10194 for i=1,#a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10195 local a=a[i]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10196 if t==a:lower()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10197 e("debug","Cert dNSName %s matched hostname",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10198 return true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10199 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10200 if a:match("^%*%.")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10201 local t=a:gsub("^[^.]+%.","")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10202 if o==t:lower()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10203 e("debug","Cert dNSName %s matched hostname",a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10204 return true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10205 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10206 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10207 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10208 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10209 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10210 local function w(a,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10211 local i=o(a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10212 for a=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10213 local t=t[a]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10214 if t:match("[@/]")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10215 e("debug","Ignoring xmppAddr %s because it's not a bare domain",t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10216 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10217 local a=o(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10218 if a==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10219 e("info","Ignoring xmppAddr %s, failed nameprep!",t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10220 else
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10221 if i==a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10222 e("debug","Cert xmppAddr %s matched hostname",t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10223 return true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10224 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10225 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10226 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10227 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10228 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10229 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10230 local function f(i,o,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10231 local a=r(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10232 if a==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10233 e("info","Host %s failed IDNA ToASCII operation",i);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10234 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10235 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10236 if o:match("^_")==nil then o="_"..o end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10237 a=a:lower();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10238 local n=a:gsub("^[^.]+%.","")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10239 for i=1,#t do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10240 local i,t=t[i]:match("^(_[^.]+)%.(.*)");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10241 if o==i then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10242 if a==t:lower()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10243 e("debug","Cert SRVName %s matched hostname",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10244 return true;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10245 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10246 if t:match("^%*%.")then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10247 local a=t:gsub("^[^.]+%.","")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10248 if n==a:lower()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10249 e("debug","Cert SRVName %s matched hostname",t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10250 return true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10251 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10252 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10253 if a==t:lower()then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10254 e("debug","Cert SRVName %s matched hostname",t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10255 return true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10256 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10257 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10258 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10259 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10260 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10261 local function m(o,a,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10262 if i.setencode then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10263 i:setencode("utf8");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10264 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10265 local t=i:extensions()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10266 if t[h]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10267 local e=t[h];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10268 local t=false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10269 if e[s]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10270 t=true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10271 if a=="_xmpp-client"or a=="_xmpp-server"then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10272 if w(o,e[s])then return true end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10273 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10274 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10275 if e[n]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10276 t=true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10277 if a and f(o,a,e[n])then return true end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10278 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10279 if e["dNSName"]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10280 t=true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10281 if l(o,e["dNSName"])then return true end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10282 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10283 if e["uniformResourceIdentifier"]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10284 t=true
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10285 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10286 if t then return false end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10287 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10288 local a=i:subject()
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10289 local t=nil
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10290 for o=1,#a do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10291 local a=a[o]
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10292 if a["oid"]==u then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10293 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10294 e("info","Certificate has multiple common names")
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10295 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10296 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10297 t=a["value"];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10298 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10299 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10300 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10301 return l(o,{t})
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10302 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10303 return false
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10304 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10305 local function l(i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10306 if i.setencode then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10307 i:setencode("utf8");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10308 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10309 local a=p.new();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10310 local e=i:extensions();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10311 local t=e[h];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10312 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10313 if t["dNSName"]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10314 for t,e in d(t["dNSName"])do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10315 local t=e:sub(1,2)=="*.";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10316 if t then e=e:sub(3);end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10317 e=y(o(e));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10318 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10319 if t then e="*."..e;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10320 a:set(e,"*",true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10321 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10322 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10323 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10324 if t[s]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10325 for t,e in d(t[s])do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10326 e=o(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10327 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10328 a:set(e,"xmpp-client",true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10329 a:set(e,"xmpp-server",true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10330 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10331 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10332 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10333 if t[n]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10334 for t,e in d(t[n])do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10335 local t,e=e:match("^_([^.]+)%.(.*)");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10336 if t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10337 e=o(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10338 if e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10339 a:set(e,t,true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10340 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10341 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10342 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10343 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10344 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10345 local e=i:subject();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10346 for t=1,#e do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10347 local e=e[t];
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10348 if e.oid==u then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10349 local e=o(e.value);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10350 if e and r(e)then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10351 a:set(e,"*",true);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10352 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10353 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10354 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10355 return a.data;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10356 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10357 local t="%-%-%-%-%-BEGIN ([A-Z ]+)%-%-%-%-%-\r?\n"..
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10358 "([0-9A-Za-z+/=\r\n]*)\r?\n%-%-%-%-%-END %1%-%-%-%-%-";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10359 local function a(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10360 local e,t=e:match(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10361 if e and t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10362 return c.decode(t),e;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10363 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10364 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10365 local n=('.'):rep(64);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10366 local i="-----BEGIN %s-----\n%s\n-----END %s-----\n"
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10367 local function o(t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10368 e=e and e:upper()or"CERTIFICATE";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10369 t=c.encode(t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10370 return v(i,e,t:gsub(n,'%0\n',(#t-1)/64),e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10371 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10372 return{
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10373 verify_identity=m;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10374 get_identities=l;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10375 pem2der=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10376 der2pem=o;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10377 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10378 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10379 package.preload['verse.bosh']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10380 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10381 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10382 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
10383 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10384 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10385 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10386 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10387 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10388 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10389 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10390 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10391 local n=require"util.xmppstream".new;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10392 local o=require"util.stanza";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10393 require"net.httpclient_listener";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10394 local a=require"net.http";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10395 local e=setmetatable({},{__index=verse.stream_mt});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10396 e.__index=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10397 local h="http://etherx.jabber.org/streams";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10398 local s="http://jabber.org/protocol/httpbind";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10399 local t=5;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10400 function verse.new_bosh(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10401 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10402 bosh_conn_pool={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10403 bosh_waiting_requests={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10404 bosh_rid=math.random(1,999999);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10405 bosh_outgoing_buffer={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10406 bosh_url=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10407 conn={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10408 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10409 function t:reopen()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10410 self.bosh_need_restart=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10411 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10412 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10413 local t=verse.new(a,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10414 return setmetatable(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10415 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10416 function e:connect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10417 self:_send_session_request();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10418 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10419 function e:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10420 self:debug("Putting into BOSH send buffer: %s",tostring(e));
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10421 self.bosh_outgoing_buffer[#self.bosh_outgoing_buffer+1]=o.clone(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10422 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10423 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10424 function e:flush()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10425 if self.connected
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10426 and#self.bosh_waiting_requests<self.bosh_max_requests
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10427 and(#self.bosh_waiting_requests==0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10428 or#self.bosh_outgoing_buffer>0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10429 or self.bosh_need_restart)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10430 self:debug("Flushing...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10431 local e=self:_make_body();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10432 local t=self.bosh_outgoing_buffer;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10433 for o,a in ipairs(t)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10434 e:add_child(a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10435 t[o]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10436 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10437 self:_make_request(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10438 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10439 self:debug("Decided not to flush.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10440 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10441 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10442 function e:_make_request(o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10443 local e,t=a.request(self.bosh_url,{body=tostring(o)},function(i,e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10444 if e~=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10445 self.inactive_since=nil;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10446 return self:_handle_response(i,e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10447 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10448 local e=os.time();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10449 if not self.inactive_since then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10450 self.inactive_since=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10451 elseif e-self.inactive_since>self.bosh_max_inactivity then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10452 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10453 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10454 self:debug("%d seconds left to reconnect, retrying in %d seconds...",
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10455 self.bosh_max_inactivity-(e-self.inactive_since),t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10456 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10457 timer.add_task(t,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10458 self:debug("Retrying request...");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10459 for t,e in ipairs(self.bosh_waiting_requests)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10460 if e==a then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10461 table.remove(self.bosh_waiting_requests,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10462 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10463 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10464 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10465 self:_make_request(o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10466 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10467 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10468 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10469 table.insert(self.bosh_waiting_requests,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10470 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10471 self:warn("Request failed instantly: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10474 function e:_disconnected()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10475 self.connected=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10476 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10477 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10478 function e:_send_session_request()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10479 local e=self:_make_body();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10480 e.attr.hold="1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10481 e.attr.wait="60";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10482 e.attr["xml:lang"]="en";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10483 e.attr.ver="1.6";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10484 e.attr.from=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10485 e.attr.to=self.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10486 e.attr.secure='true';
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10487 a.request(self.bosh_url,{body=tostring(e)},function(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10488 if t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10489 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10490 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10491 local e=self:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10492 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10493 self:warn("Invalid session creation response");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10494 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10495 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10496 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10497 self.bosh_sid=e.attr.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10498 self.bosh_wait=tonumber(e.attr.wait);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10499 self.bosh_hold=tonumber(e.attr.hold);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10500 self.bosh_max_inactivity=tonumber(e.attr.inactivity);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10501 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
10502 self.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10503 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10504 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10505 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10506 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10507 function e:_handle_response(a,t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10508 if self.bosh_waiting_requests[1]~=e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10509 self:warn("Server replied to request that wasn't the oldest");
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10510 for t,a in ipairs(self.bosh_waiting_requests)do
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10511 if a==e then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10512 self.bosh_waiting_requests[t]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10513 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10514 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10515 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10516 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10517 table.remove(self.bosh_waiting_requests,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10518 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10519 local e=self:_parse_response(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10520 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10521 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10522 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10523 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10524 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10525 function e:_handle_response_payload(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10526 local e=t.tags;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10527 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10528 local e=e[t];
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10529 if e.attr.xmlns==h then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10530 self:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10531 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10532 self:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10533 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10534 self:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10535 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10537 if t.attr.type=="terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10538 self:_disconnected({reason=t.attr.condition});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10539 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10540 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10541 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10542 stream_ns="http://jabber.org/protocol/httpbind",stream_tag="body",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10543 default_ns="jabber:client",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10544 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
10545 handlestanza=function(e,t)e.payload:add_child(t);end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10546 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10547 function e:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10548 self:debug("Parsing response: %s",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10549 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10550 self:debug("%s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10551 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10552 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10553 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10554 local t={notopen=true,stream=self};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10555 local a=n(t,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10556 a:feed(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10557 return t.payload;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10558 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10559 function e:_make_body()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10560 self.bosh_rid=self.bosh_rid+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10561 local e=verse.stanza("body",{
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10562 xmlns=s;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10563 content="text/xml; charset=utf-8";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10564 sid=self.bosh_sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10565 rid=self.bosh_rid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10566 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10567 if self.bosh_need_restart then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10568 self.bosh_need_restart=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10569 e.attr.restart='true';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10570 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10571 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10572 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10573 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10574 package.preload['verse.client']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10575 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10576 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10577 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
10578 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10579 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10580 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10581 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10582 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10583 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10584 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10585 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10586 local t=require"verse";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10587 local i=t.stream_mt;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10588 local d=require"util.jid".split;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10589 local r=require"net.adns";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10590 local a=require"util.stanza";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10591 local o=require"util.id".short;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10592 math.randomseed((require"socket".gettime()*1e6)%2147483648);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10593 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
10594 a.message,a.presence,a.iq,a.stanza,a.reply,a.error_reply;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10595 function t.iq(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10596 if not e.id then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10597 e.id=o();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10598 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10599 return a.iq(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10600 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10601 local s=require"util.xmppstream".new;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10602 local n="http://etherx.jabber.org/streams";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10603 local function h(e,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10604 if e.priority==t.priority then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10605 if not e.weight_r then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10606 e.weight_r=math.random();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10607 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10608 if not t.weight_r then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10609 t.weight_r=math.random();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10610 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10611 return(1+e.weight)*e.weight_r>(1+t.weight)*t.weight_r;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10612 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10613 return e.priority<t.priority;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10614 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10615 local o={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10616 stream_ns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10617 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10618 default_ns="jabber:client"};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10619 function o.streamopened(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10620 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10621 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10622 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10623 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10624 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10625 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10626 function o.streamclosed(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10627 e.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10628 if not e.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10629 e:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10630 e.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10631 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10632 e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10633 return e:close("stream closed")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10634 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10635 function o.handlestanza(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10636 if e.attr.xmlns==n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10637 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10638 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10639 return t:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10640 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10641 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10642 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10643 function o.error(a,t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10644 if a:event(t,e)==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10645 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10646 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
10647 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
10648 error(t.name..(e and": "..e or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10649 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10650 error(e and e.name or t or"unknown-error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10651 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10652 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10653 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10654 function i:reset()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10655 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10656 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10657 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10658 self.stream=s(self,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10659 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10660 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10661 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10662 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10663 function i:connect_client(e,i,a,o)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10664 self.jid,self.password=e,i;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10665 self.client_key,self.server_key=a,o;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10666 self.username,self.host,self.resource=d(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10667 self:add_plugin("tls");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10668 self:add_plugin("sasl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10669 self:add_plugin("bind");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10670 function self.data(t,e)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10671 local t,a=self.stream:feed(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10672 if t then return;end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10673 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
10674 self:close("xml-not-well-formed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10675 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10676 self:hook("connected",function()self:reopen();end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10677 self:hook("incoming-raw",function(e)return self.data(self.conn,e);end);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10678 self:hook("read-timeout",function()self:send(" ");return true;end,-1);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10679 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10680 self.tracked_iqs={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10681 self:hook("stanza",function(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10682 local t,a=e.attr.id,e.attr.type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10683 if t and e.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[t]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10684 self.tracked_iqs[t](e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10685 self.tracked_iqs[t]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10686 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10687 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10688 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10689 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10690 local a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10691 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
10692 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
10693 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10694 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10695 a=self:event("iq/"..o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10696 if not a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10697 a=self:event("iq",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10698 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10699 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10700 if a==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10701 self:send(t.error_reply(e,"cancel","service-unavailable"));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10702 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10703 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10704 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10705 a=self:event(e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10706 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10707 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10708 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10709 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10710 self:hook("outgoing",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10711 if e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10712 self:event("stanza-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10713 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10714 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10715 self:hook("stanza-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10716 if not e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10717 self:event(e.name.."-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10718 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10719 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10720 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10721 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10722 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10723 self:hook("session-success",e,-1)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10724 self:hook("bind-success",e,-1);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10725 local e=self.close;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10726 function self:close(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10727 self.close=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10728 if not self.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10729 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10730 self.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10731 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10732 return self:close(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10733 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10734 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10735 local function a()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10736 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
10737 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10738 if not(self.connect_host or self.connect_port)then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10739 r.lookup(function(t)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10740 if t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10741 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10742 self.srv_hosts=e;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10743 for a,t in ipairs(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10744 table.insert(e,t.srv);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10745 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10746 table.sort(e,h);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10747 local t=e[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10748 self.srv_choice=1;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10749 if t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10750 self.connect_host,self.connect_port=t.target,t.port;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10751 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
10752 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10753 self:hook("disconnected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10754 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
10755 self.srv_choice=self.srv_choice+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10756 local e=e[self.srv_choice];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10757 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
10758 a();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10759 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10760 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10761 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10762 self:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10763 self.srv_hosts=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10764 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10765 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10766 a();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10767 end,"_xmpp-client._tcp."..(self.host)..".","SRV");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10768 else
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10769 a();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10770 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10771 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10772 function i:reopen()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10773 self:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10774 self:send(a.stanza("stream:stream",{to=self.host,["xmlns:stream"]='http://etherx.jabber.org/streams',
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10775 xmlns="jabber:client",version="1.0",["xml:lang"]=self.lang}):top_tag());
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10776 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10777 function i:send_iq(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10778 local t=e.attr.id or uuid.generate();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10779 self.tracked_iqs[t]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10780 e.attr.id=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10781 self:send(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10782 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10783 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10784 package.preload['verse.component']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10785 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10786 local function e(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10787 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
10788 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10789 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10790 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10791 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10792 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10793 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10794 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10795 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10796 local a=require"verse";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10797 local t=a.stream_mt;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10798 local d=require"util.jid".split;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10799 local e=require"lxp";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10800 local o=require"util.stanza";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10801 local r=require"util.hashes".sha1;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10802 a.message,a.presence,a.iq,a.stanza,a.reply,a.error_reply=
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10803 o.message,o.presence,o.iq,o.stanza,o.reply,o.error_reply;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10804 local h=require"util.xmppstream".new;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10805 local s="http://etherx.jabber.org/streams";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10806 local i="jabber:component:accept";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10807 local n={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10808 stream_ns=s,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10809 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10810 default_ns=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10811 function n.streamopened(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10812 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10813 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10814 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10815 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10816 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10817 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10818 function n.streamclosed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10819 return e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10820 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10821 function n.handlestanza(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10822 if e.attr.xmlns==s then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10823 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10824 elseif e.attr.xmlns or e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10825 return t:event("stream/"..(e.attr.xmlns or i),e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10826 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10827 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10828 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10829 function t:reset()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10830 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10831 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10832 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10833 self.stream=h(self,n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10834 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10835 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10836 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10837 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10838 function t:connect_component(e,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10839 self.jid,self.password=e,n;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10840 self.username,self.host,self.resource=d(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10841 function self.data(a,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10842 local a,o=self.stream:feed(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10843 if a then return;end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10844 t:debug("Received invalid XML (%s) %d bytes: %s",tostring(o),#e,e:sub(1,300):gsub("[\r\n]+"," "));
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10845 t:close("xml-not-well-formed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10846 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10847 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
10848 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10849 self.tracked_iqs={};
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10850 self:hook("stanza",function(t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10851 local e,a=t.attr.id,t.attr.type;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10852 if e and t.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[e]then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10853 self.tracked_iqs[e](t);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10854 self.tracked_iqs[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10855 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10857 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10858 self:hook("stanza",function(e)
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10859 local t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10860 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
10861 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
10862 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10863 if o then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10864 t=self:event("iq/"..o,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10865 if not t then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10866 t=self:event("iq",e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10867 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10868 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10869 if t==nil then
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10870 self:send(a.error_reply(e,"cancel","service-unavailable"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10871 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10872 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10873 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10874 t=self:event(e.name,e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10875 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10876 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10877 return t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10878 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10879 self:hook("opened",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10880 print(self.jid,self.stream_id,e.id);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10881 local e=r(self.stream_id..n,true);
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10882 self:send(o.stanza("handshake",{xmlns=i}):text(e));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10883 self:hook("stream/"..i,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10884 if e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10885 self:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10886 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10887 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10888 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10889 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10890 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10891 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10892 self:hook("authentication-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10893 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
10894 self:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10895 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10896 function t:reopen()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10897 self:reset();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10898 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
10899 xmlns=i,version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10900 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10901 function t:close(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10902 if not self.notopen then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10903 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10904 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10905 local e=self.conn.disconnect();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10906 self.conn:close();
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10907 e(conn,t);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10908 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10909 function t:send_iq(e,a)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10910 local t=self:new_id();
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10911 self.tracked_iqs[t]=a;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10912 e.attr.id=t;
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10913 self:send(e);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10914 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10915 function t:new_id()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10916 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10917 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10918 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10919 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10920 pcall(require,"luarocks.require");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10921 local h=require"socket";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10922 pcall(require,"ssl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10923 local a=require"net.server";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10924 local s=require"util.events";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10925 local o=require"util.logger";
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10926 local n=require"util.format".format;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10927 local e={};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10928 e.server=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10929 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10930 t.__index=t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10931 e.stream_mt=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10932 e.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10933 function e.init(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10934 for e=1,select("#",...)do
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10935 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
10936 if not t then
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10937 error("Verse connection module not found: verse."..select(e,...)..a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10938 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10939 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10940 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10941 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10942 local i=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10943 function e.new(o,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10944 local t=setmetatable(a or{},t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10945 i=i+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10946 t.id=tostring(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10947 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
10948 t.events=s.new();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10949 t.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10950 t.verse=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10951 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10952 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10953 e.add_task=require"util.timer".add_task;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10954 e.logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10955 e.new_logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10956 e.log=e.logger("verse");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10957 function e.set_log_handler(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10958 t=t or{"debug","info","warn","error"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10959 o.reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10960 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
10961 local o=e;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10962 function e(a,t,e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10963 o:write(a,"\t",t,"\t",e,"\n");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10965 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10966 if e then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10967 local function a(t,a,o,...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10968 return e(t,a,n(o,...));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10969 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10970 for t,e in ipairs(t)do
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10971 o.add_level_sink(e,a);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10972 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10973 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10974 end
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10975 function e._default_log_handler(a,o,t)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10976 return io.stderr:write(a,"\t",o,"\t",t,"\n");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10977 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10978 e.set_log_handler(e._default_log_handler,{"error"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10979 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10980 e.log("error","Error: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10981 e.log("error","Traceback: %s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10982 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10983 function e.set_error_handler(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10984 o=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10985 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10986 function e.loop()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10987 return xpcall(a.loop,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10988 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10989 function e.step()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10990 return xpcall(a.step,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10991 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10992 function e.quit()
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10993 return a.setquitting("once");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10994 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10995 function e.tls_builder(...)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10996 return a.tls_builder(...);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
10997 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
10998 function t:listen(t,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10999 t=t or"localhost";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11000 o=o or 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11001 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
11002 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11003 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
11004 self.server=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11005 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11006 return e,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11007 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11008 function t:connect(o,i)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11009 o=o or"localhost";
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11010 i=tonumber(i)or 5222;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11011 local n=h.tcp()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11012 n:settimeout(0);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11013 n:setoption("keepalive",true);
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11014 local s,t=n:connect(o,i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11015 if not s and t~="timeout"then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11016 self:warn("connect() to %s:%d failed: %s",o,i,t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11017 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
11018 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11019 local e=a.wrapclient(n,o,i,e.new_listener(self),"*a");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11020 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11021 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
11022 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
11023 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11024 self:set_conn(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11025 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11026 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11027 function t:set_conn(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11028 self.conn=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11029 self.send=function(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11030 self:event("outgoing",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11031 e=tostring(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11032 self:event("outgoing-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11033 return t:write(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11034 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11035 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11036 function t:close(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11037 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11038 e.log("error","Attempt to close disconnected connection - possibly a bug");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11039 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11040 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11041 local e=self.conn.disconnect();
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11042 self:event("shutdown");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11043 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11044 e(self.conn,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11045 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11046 function t:debug(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11047 return self.logger("debug",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11048 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11049 function t:info(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11050 return self.logger("info",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11051 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11052 function t:warn(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11053 return self.logger("warn",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11054 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11055 function t:error(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11056 return self.logger("error",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11057 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11058 function t:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11059 self:debug("Firing event: "..tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11060 return self.events.fire_event(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11061 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11062 function t:hook(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11063 return self.events.add_handler(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11064 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11065 function t:unhook(e,t)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11066 return self.events.remove_handler(e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11067 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11068 function e.eventable(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11069 e.events=s.new();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11070 e.hook,e.unhook=t.hook,t.unhook;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11071 local t=e.events.fire_event;
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11072 function e:event(e,...)return t(e,...);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11073 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11074 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11075 function t:add_plugin(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11076 if self.plugins[t]then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11077 if require("verse.plugins."..t)then
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11078 local e,a=e.plugins[t](self);
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11079 if e~=false then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11080 self:debug("Loaded %s plugin",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11081 self.plugins[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11082 else
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11083 self:warn("Failed to load %s plugin: %s",t,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11084 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11085 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11086 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11087 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11088 function e.new_listener(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11089 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11090 function a.onconnect(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11091 if t.server then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11092 local a=e.new();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11093 o:setlistener(e.new_listener(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11094 a:set_conn(o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
11095 t:event("connected",{client=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11096 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11097 t.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11098 t:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11099 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11100 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11101 function a.onincoming(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11102 t:event("incoming-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11103 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11104 function a.ondisconnect(a,e)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11105 if a~=t.conn then return end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11106 t.connected=false;
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11107 t:event("disconnected",{reason=e});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11108 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11109 function a.ondrain(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11110 t:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11111 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11112 function a.onstatus(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11113 t:event("status",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11114 end
177
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11115 function a.onreadtimeout(e)
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11116 return t:event("read-timeout");
3c19b67a1f0f verse: Update bundled verse version
Matthew Wild <mwild1@gmail.com>
parents: 103
diff changeset
11117 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11118 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11119 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11120 return e;

mercurial