verse.lua

Sun, 07 May 2017 07:51:07 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sun, 07 May 2017 07:51:07 +0100
changeset 88
98b4cf14960b
parent 12
fc435d567896
child 103
9e0e56393978
permissions
-rw-r--r--

verse.lua: Update to 5.2-compatible version

12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 package.preload['util.encodings']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 error("Function not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5 local e=require"mime";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6 return{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 stringprep={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8 base64={encode=e.b64,decode=e.unb64};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
9 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 package.preload['util.hashes']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
12 local t,e=pcall(require,"crypto");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
13 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
14 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
15 local o=e.digest;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
16 local function s(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
17 return function(t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
18 return o(e,t,not a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
19 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
20 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
21 local e=e.hmac.digest;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
22 local function n(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
23 return function(i,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
24 return e(o,a,i,not t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
25 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
26 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
27 local e={"md5","sha1","sha256","sha512"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
28 for a,e in ipairs(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
29 t[e]=s(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
30 t["hmac_"..e]=n(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
31 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
32 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
33 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
34 local t=require"util.sha1".sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
35 local s=require"bit".bxor;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
36 local a=string.rep;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
37 local n=string.char;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
38 local d=string.byte;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
39 local i=table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
40 local function r(e,h,r)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
41 if#e>64 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
42 e=t(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
43 elseif#e<64 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
44 e=e..a("\0",64-#e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
45 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
46 local o,a={},{}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
47 for t=1,64 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
48 local e=d(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
49 o[t]=n(s(e,92));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
50 a[t]=n(s(e,54));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
51 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
52 o=i(o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
53 a=i(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
54 return t(o..t(a..h),r);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
55 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
56 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
57 sha1=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
58 hmac_sha1=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
59 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
60 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 package.preload['util.sha1']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
63 local r=string.len
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
64 local o=string.char
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
65 local j=string.byte
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 local q=string.sub
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
67 local h=math.floor
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 local t=require"bit"
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
69 local g=t.bnot
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 local e=t.band
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 local y=t.bor
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 local n=t.bxor
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
73 local a=t.lshift
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 local i=t.rshift
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
75 local m,d,c,l,u
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 local function p(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
77 return a(e,t)+i(e,32-t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
78 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
79 local function s(i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
80 local t,a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 local t=""
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 for n=1,8 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
83 a=e(i,15)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
84 if(a<10)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
85 t=o(a+48)..t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
86 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
87 t=o(a+87)..t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
88 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
89 i=h(i/16)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
93 local function k(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
94 local i,a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 local n=""
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
96 i=r(t)*8
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
97 t=t..o(128)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
98 a=56-e(r(t),63)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
99 if(a<0)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
100 a=a+64
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
101 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
102 for e=1,a do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
103 t=t..o(0)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 for t=1,8 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
106 n=o(e(i,255))..n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
107 i=h(i/256)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 return t..n
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
111 local function b(f)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
112 local s,t,i,o,w,h,r,v
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
113 local a,a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
114 local a={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
115 while(f~="")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 for e=0,15 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
117 a[e]=0
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 for t=1,4 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
119 a[e]=a[e]*256+j(f,e*4+t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 for e=16,79 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
123 a[e]=p(n(n(a[e-3],a[e-8]),n(a[e-14],a[e-16])),1)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
124 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
125 s=m
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
126 t=d
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
127 i=c
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
128 o=l
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
129 w=u
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
130 for d=0,79 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
131 if(d<20)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
132 h=y(e(t,i),e(g(t),o))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
133 r=1518500249
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
134 elseif(d<40)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
135 h=n(n(t,i),o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
136 r=1859775393
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
137 elseif(d<60)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
138 h=y(y(e(t,i),e(t,o)),e(i,o))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
139 r=2400959708
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
140 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
141 h=n(n(t,i),o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
142 r=3395469782
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
143 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
144 v=p(s,5)+h+w+r+a[d]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
145 w=o
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
146 o=i
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
147 i=p(t,30)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
148 t=s
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
149 s=v
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
150 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
151 m=e(m+s,4294967295)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
152 d=e(d+t,4294967295)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
153 c=e(c+i,4294967295)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
154 l=e(l+o,4294967295)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
155 u=e(u+w,4294967295)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
156 f=q(f,65)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
157 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
158 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
159 local function t(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
160 e=k(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
161 m=1732584193
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
162 d=4023233417
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
163 c=2562383102
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
164 l=271733878
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
165 u=3285377520
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
166 b(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
167 local e=s(m)..s(d)..s(c)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
168 ..s(l)..s(u);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172 return(e:gsub("..",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 return string.char(tonumber(e,16));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174 end));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
177 _G.sha1={sha1=t};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 return _G.sha1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 package.preload['lib.adhoc']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
181 local s,r=require"util.stanza",require"util.uuid";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 local e="http://jabber.org/protocol/commands";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 local i={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
184 local h={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
185 local function n(o,i,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
186 local e=s.stanza("command",{xmlns=e,node=o.node,status=i});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187 if t then e.attr.sessionid=t;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188 if a then e.attr.action=a;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
191 function h.new(o,a,t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
192 return{name=o,node=a,handler=t,cmdtag=n,permission=(e or"user")};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
193 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
194 function h.handle_cmd(o,h,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
195 local e=t.tags[1].attr.sessionid or r.generate();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
196 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
197 a.to=t.attr.to;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
198 a.from=t.attr.from;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
199 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
200 a.form=t.tags[1]:child_with_ns("jabber:x:data");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
201 local a,n=o:handler(a,i[e]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
202 i[e]=n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
203 local n=s.reply(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
204 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
205 if a.status=="completed"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 i[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
207 t=o:cmdtag("completed",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
208 elseif a.status=="canceled"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 i[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
210 t=o:cmdtag("canceled",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
211 elseif a.status=="error"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 i[e]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
213 n=s.error_reply(n,a.error.type,a.error.condition,a.error.message);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
214 h.send(n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
217 t=o:cmdtag("executing",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
218 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
219 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
220 if a=="info"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
221 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
222 elseif a=="warn"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
223 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
224 elseif a=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
225 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
226 elseif a=="actions"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
227 local a=s.stanza("actions");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
228 for i,e in ipairs(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 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
230 a:tag(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
231 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
232 module:log("error",'Command "'..o.name..
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
233 '" 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
234 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
235 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
236 t:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
237 elseif a=="form"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
238 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
239 elseif a=="result"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
240 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
241 elseif a=="other"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
242 t:add_child(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
243 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
244 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
245 n:add_child(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
246 h.send(n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
247 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
249 return h;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 package.preload['util.stanza']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
252 local t=table.insert;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
253 local d=table.remove;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
254 local y=table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
255 local h=string.format;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
256 local l=string.match;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
257 local f=tostring;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
258 local m=setmetatable;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
259 local p=getmetatable;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
260 local n=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
261 local o=ipairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
262 local i=type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
263 local b=string.gsub;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
264 local w=string.sub;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
265 local c=string.find;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 local e=os;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
267 local u=not e.getenv("WINDIR");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
268 local r,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
269 if u then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
270 local t,e=pcall(require,"util.termcolours");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
271 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
272 r,a=e.getstyle,e.getstring;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
273 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
274 u=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
275 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
276 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
277 local v="urn:ietf:params:xml:ns:xmpp-stanzas";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
278 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
279 local e={__type="stanza"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
280 e.__index=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
281 local function s(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
282 local t={name=t,attr=a or{},tags={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
283 return m(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
284 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
285 local function k(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
286 return p(t)==e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
287 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
288 function e:query(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
289 return self:tag("query",{xmlns=e});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
290 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
291 function e:body(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
292 return self:tag("body",e):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
293 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
294 function e:tag(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
295 local a=s(e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
296 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
297 if not e then e={};self.last_add=e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
298 (e[#e]or self):add_direct_child(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
299 t(e,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
301 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
302 function e:text(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
303 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
306 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 function e:up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
308 local e=self.last_add;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
309 if e then d(e);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
310 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
311 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
312 function e:reset()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
313 self.last_add=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
314 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
315 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
316 function e:add_direct_child(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
317 if i(e)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
318 t(self.tags,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
319 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
320 t(self,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
321 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
322 function e:add_child(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
323 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
324 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
325 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
326 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
327 function e:get_child(t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
328 for o,e in o(self.tags)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
329 if(not t or e.name==t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
330 and((not a and self.attr.xmlns==e.attr.xmlns)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
331 or e.attr.xmlns==a)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
332 return 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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
335 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
336 function e:get_child_text(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
337 local e=self:get_child(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
338 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
339 return e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
340 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
341 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
342 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
343 function e:child_with_name(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
344 for a,e in o(self.tags)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
345 if e.name==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
346 end
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:child_with_ns(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
349 for a,e in o(self.tags)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 if e.attr.xmlns==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
352 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 function e:children()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 return function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 e=e+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
357 return t[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 end,self,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
360 function e:childtags(o,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
361 local e=self.tags;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
362 local a,t=1,#e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 return function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
364 for t=a,t do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
365 local e=e[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
366 if(not o or e.name==o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
367 and((not i and self.attr.xmlns==e.attr.xmlns)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
368 or e.attr.xmlns==i)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
369 a=t+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
370 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
371 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
372 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
373 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
374 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
375 function e:maptags(i)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
376 local o,e=self.tags,1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
377 local n,a=#self,#o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
378 local t=1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
379 while e<=a and a>0 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
380 if self[t]==o[e]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
381 local i=i(self[t]);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
382 if i==nil then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
383 d(self,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
384 d(o,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
385 n=n-1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
386 a=a-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
387 t=t-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
388 e=e-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
389 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
390 self[t]=i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
391 o[e]=i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
392 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
393 e=e+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
394 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
395 t=t+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
396 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
397 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
398 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
399 function e:find(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
400 local e=1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
401 local s=#a+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
402 repeat
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
403 local o,t,n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
404 local i=w(a,e,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
405 if i=="@"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
406 return self.attr[w(a,e+1)];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
407 elseif i=="{"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
408 o,e=l(a,"^([^}]+)}()",e+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
409 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
410 t,n,e=l(a,"^([^@/#]*)([/#]?)()",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
411 t=t~=""and t or nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
412 if e==s then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
413 if n=="#"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
414 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
415 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
416 return self:get_child(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
417 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
418 self=self:get_child(t,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
419 until not self
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
420 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
421 local w={["'"]="&apos;",["\""]="&quot;",["<"]="&lt;",[">"]="&gt;",["&"]="&amp;"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
422 local function d(e)return(b(e,"['&<>\"]",w));end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
423 local function w(o,e,h,a,r)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
424 local i=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
425 local s=o.name
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
426 t(e,"<"..s);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
427 for o,n in n(o.attr)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
428 if c(o,"\1",1,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
429 local o,s=l(o,"^([^\1]*)\1?(.*)$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
430 i=i+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
431 t(e," xmlns:ns"..i.."='"..a(o).."' ".."ns"..i..":"..s.."='"..a(n).."'");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
432 elseif not(o=="xmlns"and n==r)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
433 t(e," "..o.."='"..a(n).."'");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
434 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
435 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
436 local i=#o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
437 if i==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
438 t(e,"/>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
439 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
440 t(e,">");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
441 for i=1,i do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
442 local i=o[i];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
443 if i.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
444 h(i,e,h,a,o.attr.xmlns);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
445 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
446 t(e,a(i));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
447 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
448 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
449 t(e,"</"..s..">");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
450 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
452 function e.__tostring(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
453 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
454 w(t,e,w,d,nil);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
455 return y(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
456 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
457 function e.top_tag(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
458 local t="";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
459 if e.attr then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
460 for e,a in n(e.attr)do if i(e)=="string"then t=t..h(" %s='%s'",e,d(f(a)));end end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
461 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
462 return h("<%s%s>",e.name,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
463 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
464 function e.get_text(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
465 if#e.tags==0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
466 return y(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
467 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
468 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
469 function e.get_error(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
470 local i,t,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
471 local e=e:get_child("error");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
472 if not e then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
473 return nil,nil,nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
474 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
475 i=e.attr.type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
476 for o,e in o(e.tags)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
477 if e.attr.xmlns==v then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
478 if not a and e.name=="text"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
479 a=e:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
480 elseif not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
481 t=e.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
482 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
483 if t and a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
484 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
485 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
486 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
487 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
488 return i,t or"undefined-condition",a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
489 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
490 local w=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
491 local function y()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
492 w=w+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
493 return"lx"..w;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
494 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
495 local function w(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
496 local a={name=e.name,attr=e.attr};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
497 for o,e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
498 if i(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
499 t(a,w(e));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
500 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
501 t(a,e);
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 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
504 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
505 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
506 local function p(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
507 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
508 local s=a.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
509 for e=1,#s do s[e]=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
510 local h={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
511 for e in n(s)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
512 if c(e,"|",1,true)and not c(e,"\1",1,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
513 local a,t=l(e,"^([^|]+)|(.+)$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
514 h[a.."\1"..t]=s[e];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
515 s[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
516 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
517 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
518 for e,t in n(h)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
519 s[e]=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
520 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
521 m(a,e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
522 for t,e in o(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
523 if i(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
524 p(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
525 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
526 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
527 if not a.tags then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
528 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
529 for n,o in o(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
530 if i(o)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
531 t(e,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
532 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
533 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
534 a.tags=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
535 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
537 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
538 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
539 local function l(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
540 local o,i={},{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
541 for t,e in n(a.attr)do o[t]=e;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
542 local o={name=a.name,attr=o,tags=i};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
543 for e=1,#a do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
544 local e=a[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
545 if e.name then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
546 e=l(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
547 t(i,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
548 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
549 t(o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
550 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
551 return m(o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
552 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
553 local function b(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
554 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
555 return s("message",t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
556 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
557 return s("message",t):tag("body"):text(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
558 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
559 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
560 local function g(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
561 if e and not e.id then e.id=y();end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
562 return s("iq",e or{id=y()});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
563 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
564 local function m(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
565 return s(e.name,e.attr and{to=e.attr.from,from=e.attr.to,id=e.attr.id,type=((e.name=="iq"and"result")or e.attr.type)});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
566 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
567 local c={xmlns=v};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
568 local function v(e,o,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
569 local e=m(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
570 e.attr.type="error";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
571 e:tag("error",{type=o})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
572 :tag(a,c):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
573 if t then e:tag("text",c):text(t):up();end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
574 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
575 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
576 local function c(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
577 return s("presence",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
578 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
579 if u then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
580 local s=r("yellow");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
581 local u=r("red");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
582 local l=r("red");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
583 local t=r("magenta");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
584 local r=" "..a(s,"%s")..a(t,"=")..a(u,"'%s'");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
585 local s=a(t,"<")..a(l,"%s").."%s"..a(t,">");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
586 local l=s.."%s"..a(t,"</")..a(l,"%s")..a(t,">");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
587 function e.pretty_print(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
588 local e="";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
589 for a,t in o(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
590 if i(t)=="string"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
591 e=e..d(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
592 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
593 e=e..t:pretty_print();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
594 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
595 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
596 local a="";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
597 if t.attr then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
598 for e,t in n(t.attr)do if i(e)=="string"then a=a..h(r,e,f(t));end end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
599 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
600 return h(l,t.name,a,e,t.name);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
601 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
602 function e.pretty_top_tag(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
603 local e="";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
604 if t.attr then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
605 for t,a in n(t.attr)do if i(t)=="string"then e=e..h(r,t,f(a));end end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
606 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
607 return h(s,t.name,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
608 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
609 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
610 e.pretty_print=e.__tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
611 e.pretty_top_tag=e.top_tag;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
612 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
613 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
614 stanza_mt=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
615 stanza=s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
616 is_stanza=k;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
617 new_id=y;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
618 preserialize=w;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
619 deserialize=p;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
620 clone=l;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
621 message=b;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
622 iq=g;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
623 reply=m;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
624 error_reply=v;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
625 presence=c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
626 xml_escape=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
627 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
628 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
629 package.preload['util.timer']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
630 local a=require"net.server";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
631 local s=math.min
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
632 local l=math.huge
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
633 local n=require"util.time".now
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
634 local h=table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
635 local r=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
636 local d=type;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
637 local i={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
638 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
639 local t=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
640 local t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
641 if not a.event then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
642 function t(o,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
643 local n=n();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
644 o=o+n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
645 if o>=n then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
646 h(e,{o,i});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
647 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
648 local e=i(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
649 if e and d(e)=="number"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
650 return t(e,i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
651 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
652 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
653 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
654 a._addtimer(function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
655 local a=n();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
656 if#e>0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
657 for a,t in r(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
658 h(i,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
659 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
660 e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
661 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
662 local e=l;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
663 for h,o in r(i)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
664 local o,n=o[1],o[2];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
665 if o<=a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
666 i[h]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
667 local a=n(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
668 if d(a)=="number"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
669 t(a,n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
670 e=s(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
671 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
672 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
673 e=s(e,o-a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
674 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
675 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
676 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
677 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
678 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
679 local e=a.event;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
680 local o=a.event_base;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
681 local i=(e.core and e.core.LEAVE)or-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
682 function t(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
683 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
684 t=o:addevent(nil,0,function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
685 local e=e(n());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
686 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
687 return 0,e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
688 elseif t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
689 return i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
690 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
691 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
692 ,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
693 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
694 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
695 return{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
696 add_task=t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
697 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
698 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
699 package.preload['util.termcolours']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
700 local h,s=table.concat,table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
701 local a,r=string.char,string.format;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
702 local o=tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
703 local d=ipairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
704 local l=io.write;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
705 local i=math.floor;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
706 local u=type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
707 local m=setmetatable;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
708 local f=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
709 local t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
710 if os.getenv("WINDIR")then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
711 t=require"util.windows";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
712 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
713 local n=t and t.get_consolecolor and t.get_consolecolor();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
714 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
715 local e={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
716 reset=0;bright=1,dim=2,underscore=4,blink=5,reverse=7,hidden=8;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
717 black=30;red=31;green=32;yellow=33;blue=34;magenta=35;cyan=36;white=37;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
718 ["black background"]=40;["red background"]=41;["green background"]=42;["yellow background"]=43;["blue background"]=44;["magenta background"]=45;["cyan background"]=46;["white background"]=47;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
719 bold=1,dark=2,underline=4,underlined=4,normal=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
720 }
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
721 local c={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
722 ["0"]=n,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
723 ["1"]=7+8,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
724 ["1;33"]=2+4+8,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
725 ["1;31"]=4+8
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
726 }
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
727 local p={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
728 [1]="font-weight: bold",[2]="opacity: 0.5",[4]="text-decoration: underline",[8]="visibility: hidden",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
729 [30]="color:black",[31]="color:red",[32]="color:green",[33]="color:#FFD700",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
730 [34]="color:blue",[35]="color: magenta",[36]="color:cyan",[37]="color: white",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
731 [40]="background-color:black",[41]="background-color:red",[42]="background-color:green",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
732 [43]="background-color:yellow",[44]="background-color:blue",[45]="background-color: magenta",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
733 [46]="background-color:cyan",[47]="background-color: white";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
734 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
735 local a=a(27).."[%sm%s"..a(27).."[0m";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
736 local function y(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
737 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
738 return r(a,e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
739 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
740 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
741 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
742 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
743 local function w(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
744 return i(e*3/32)+232;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
745 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
746 local function r(e,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
747 if e==t and t==a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
748 return w(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
749 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
750 e=i(e*3/128);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
751 t=i(t*3/128);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
752 a=i(a*3/128);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
753 return 16+(e*36)+(t*6)+(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
754 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
755 local function a(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
756 local t=o(e:sub(1,2),16);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
757 local a=o(e:sub(3,4),16);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
758 local e=o(e:sub(5,6),16);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
759 return t,a,e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
760 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
761 m(e,{__index=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
762 if u(e)=="string"and e:find("%x%x%x%x%x%x")==1 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
763 local t=e:sub(7)==" background"and"48;5;"or"38;5;";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
764 return t..r(a(e));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
765 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
766 end});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
767 local a={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
768 red="ff0000";fuchsia="ff00ff";green="008000";white="ffffff";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
769 lime="00ff00";yellow="ffff00";purple="800080";blue="0000ff";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
770 aqua="00ffff";olive="808000";black="000000";navy="000080";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
771 teal="008080";silver="c0c0c0";maroon="800000";gray="808080";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
772 }
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
773 for t,a in f(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
774 e[t]=e[t]or e[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
775 t,a=t.." background",a.." background"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
776 e[t]=e[t]or e[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
777 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
778 local function r(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
779 local t,a={...},{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
780 for o,t in d(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
781 t=e[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
782 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
783 s(a,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
784 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
785 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
786 return h(a,";");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
787 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
788 local a="0";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
789 local function i(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
790 e=e or"0";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
791 if e~=a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
792 l("\27["..e.."m");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
793 a=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
794 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
795 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
796 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
797 function i(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
798 e=e or"0";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
799 if e~=a then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
800 t.set_consolecolor(c[e]or n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
801 a=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
802 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
803 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
804 if not n then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
805 function i()end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
806 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
807 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
808 local function a(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
809 if t=="0"then return"</span>";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
810 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
811 for t in t:gmatch("[^;]+")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
812 s(e,p[o(t)]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
813 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
814 return"</span><span style='"..h(e,";").."'>";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
815 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
816 local function e(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
817 return e:gsub("\027%[(.-)m",a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
818 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
819 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
820 getstring=y;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
821 getstyle=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
822 setstyle=i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
823 tohtml=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
824 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
825 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
826 package.preload['util.uuid']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
827 local a=require"util.random";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
828 local t=a.bytes;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
829 local o=require"util.hex".to;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
830 local i=math.ceil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
831 local function e(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
832 return o(t(i(e/2))):sub(1,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
833 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
834 local function o()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
835 return("%x"):format(t(1):byte()%4+8);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
836 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
837 local function t()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
838 return e(8).."-"..e(4).."-4"..e(3).."-"..(o())..e(3).."-"..e(12);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
839 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
840 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
841 get_nibbles=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
842 generate=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
843 seed=a.seed;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
844 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
845 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
846 package.preload['net.dns']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
847 local i=require"socket";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
848 local k=require"util.timer";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
849 local z=require"util.ip".new_ip;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
850 local e,w=pcall(require,"util.windows");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
851 local E=(e and w)or os.getenv("WINDIR");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
852 local l,_,v,a,n=
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
853 coroutine,io,math,string,table;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
854 local c,s,o,m,u,b,x,q,e,T=
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
855 ipairs,next,pairs,print,setmetatable,tostring,assert,error,select,type;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
856 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
857 get=function(t,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
858 local a=e('#',...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
859 for a=1,a do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
860 t=t[e(a,...)];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
861 if t==nil then break;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
862 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
863 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
864 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
865 set=function(a,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
866 local i=e('#',...);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
867 local h,o=e(i-1,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
868 local t,n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
869 for i=1,i-2 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
870 local i=e(i,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
871 local e=a[i]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
872 if o==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
873 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
874 return;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
875 elseif s(e,s(e))then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
876 t=nil;n=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
877 elseif t==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
878 t=a;n=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
879 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
880 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
881 e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
882 a[i]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
883 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
884 a=e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
885 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
886 if o==nil and t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
887 t[n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
888 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
889 a[h]=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
890 return o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
891 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
892 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
893 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
894 local r,d=e.get,e.set;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
895 local j=15;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
896 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
897 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
898 local h=n.insert
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
899 local function f(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
900 return(e-(e%256))/256;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
901 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
902 local function y(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
903 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
904 for o,e in o(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
905 t[o]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
906 t[e]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
907 t[a.lower(e)]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
908 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
909 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
910 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
911 local function p(i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
912 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
913 for o,i in o(i)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
914 local t=a.char(f(o),o%256);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
915 e[o]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
916 e[i]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
917 e[a.lower(i)]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
918 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
919 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
920 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
921 t.types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
922 'A','NS','MD','MF','CNAME','SOA','MB','MG','MR','NULL','WKS',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
923 'PTR','HINFO','MINFO','MX','TXT',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
924 [28]='AAAA',[29]='LOC',[33]='SRV',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
925 [252]='AXFR',[253]='MAILB',[254]='MAILA',[255]='*'};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
926 t.classes={'IN','CS','CH','HS',[255]='*'};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
927 t.type=y(t.types);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
928 t.class=y(t.classes);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
929 t.typecode=p(t.types);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
930 t.classcode=p(t.classes);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
931 local function g(e,o,i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
932 if a.byte(e,-1)~=46 then e=e..'.';end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
933 e=a.lower(e);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
934 return e,t.type[o or'A'],t.class[i or'IN'];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
935 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
936 local function p(t,a,s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
937 a=a or i.gettime();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
938 for o,e in c(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
939 if e.tod then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
940 e.ttl=v.floor(e.tod-a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
941 if e.ttl<=0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
942 t[e[e.type:lower()]]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
943 n.remove(t,o);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
944 return p(t,a,s);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
945 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
946 elseif s=='soft'then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
947 x(e.ttl==0);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
948 t[e[e.type:lower()]]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
949 n.remove(t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
950 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
951 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
952 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
953 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
954 e.__index=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
955 e.timeout=j;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
956 local function j(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
957 local e=e.type and e[e.type:lower()];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
958 if T(e)~="string"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
959 return"<UNKNOWN RDATA TYPE>";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
960 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
961 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
962 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
963 local y={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
964 LOC=e.LOC_tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
965 MX=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
966 return a.format('%2i %s',e.pref,e.mx);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
967 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
968 SRV=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
969 local e=e.srv;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
970 return a.format('%5d %5d %5d %s',e.priority,e.weight,e.port,e.target);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
971 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
972 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
973 local x={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
974 function x.__tostring(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
975 local t=(y[e.type]or j)(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
976 return a.format('%2s %-5s %6i %-28s %s',e.class,e.type,e.ttl,e.name,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
977 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
978 local j={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
979 function j.__tostring(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
980 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
981 for a,t in c(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
982 h(e,b(t)..'\n');
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
983 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
984 return n.concat(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
985 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
986 local y={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
987 function y.__tostring(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
988 local a=i.gettime();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
989 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
990 for i,e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
991 for i,e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
992 for o,e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
993 p(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
994 h(t,b(e));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
995 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
996 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
997 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
998 return n.concat(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
999 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1000 function t.random(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1001 v.randomseed(v.floor(1e4*i.gettime())%2147483648);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1002 t.random=v.random;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1003 return t.random(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1004 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1005 local function v(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1006 e=e or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1007 e.id=e.id or t.random(0,65535);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1008 e.rd=e.rd or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1009 e.tc=e.tc or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1010 e.aa=e.aa or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1011 e.opcode=e.opcode or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1012 e.qr=e.qr or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1013 e.rcode=e.rcode or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1014 e.z=e.z or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1015 e.ra=e.ra or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1016 e.qdcount=e.qdcount or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1017 e.ancount=e.ancount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1018 e.nscount=e.nscount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1019 e.arcount=e.arcount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1020 local t=a.char(
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1021 f(e.id),e.id%256,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1022 e.rd+2*e.tc+4*e.aa+8*e.opcode+128*e.qr,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1023 e.rcode+16*e.z+128*e.ra,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1024 f(e.qdcount),e.qdcount%256,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1025 f(e.ancount),e.ancount%256,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1026 f(e.nscount),e.nscount%256,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1027 f(e.arcount),e.arcount%256
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1028 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1029 return t,e.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1030 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1031 local function f(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1032 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1033 for t in a.gmatch(t,'[^.]+')do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1034 h(e,a.char(a.len(t)));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1035 h(e,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1036 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1037 h(e,a.char(0));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1038 return n.concat(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1039 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1040 local function T(o,a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1041 o=f(o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1042 a=t.typecode[a or'a'];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1043 e=t.classcode[e or'in'];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1044 return o..a..e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1045 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1046 function e:byte(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1047 e=e or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1048 local t=self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1049 local o=t+e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1050 if o>#self.packet then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1051 q(a.format('out of bounds: %i>%i',o,#self.packet));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1052 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1053 self.offset=t+e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1054 return a.byte(self.packet,t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1055 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1056 function e:word()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1057 local t,e=self:byte(2);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1058 return 256*t+e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1059 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1060 function e:dword()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1061 local e,t,o,a=self:byte(4);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1062 return 16777216*e+65536*t+256*o+a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1063 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1064 function e:sub(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1065 e=e or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1066 local t=a.sub(self.packet,self.offset,self.offset+e-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1067 self.offset=self.offset+e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1068 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1069 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1070 function e:header(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1071 local e=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1072 if not self.active[e]and not t then return nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1073 local e={id=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1074 local t,a=self:byte(2);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1075 e.rd=t%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1076 e.tc=t/2%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1077 e.aa=t/4%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1078 e.opcode=t/8%16;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1079 e.qr=t/128;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1080 e.rcode=a%16;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1081 e.z=a/16%8;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1082 e.ra=a/128;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1083 e.qdcount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1084 e.ancount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1085 e.nscount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1086 e.arcount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1087 for a,t in o(e)do e[a]=t-t%1;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1088 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1089 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1090 function e:name()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1091 local t,a=nil,0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1092 local e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1093 local o={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1094 if e==0 then return"."end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1095 while e>0 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1096 if e>=192 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1097 a=a+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1098 if a>=20 then q('dns error: 20 pointers');end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1099 local e=((e-192)*256)+self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1100 t=t or self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1101 self.offset=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1102 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1103 h(o,self:sub(e)..'.');
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1104 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1105 e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1106 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1107 self.offset=t or self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1108 return n.concat(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1109 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1110 function e:question()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1111 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1112 e.name=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1113 e.type=t.type[self:word()];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1114 e.class=t.class[self:word()];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1115 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1116 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1117 function e:A(n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1118 local i,o,e,t=self:byte(4);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1119 n.a=a.format('%i.%i.%i.%i',i,o,e,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1120 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1121 function e:AAAA(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1122 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1123 for t=1,a.rdlength,2 do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1124 local t,a=self:byte(2);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1125 n.insert(e,("%02x%02x"):format(t,a));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1126 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1127 e=n.concat(e,":"):gsub("%f[%x]0+(%x)","%1");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1128 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1129 for e in e:gmatch(":[0:]+:")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1130 n.insert(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1131 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1132 if#t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1133 a.aaaa=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1134 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1135 elseif#t>1 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1136 n.sort(t,function(e,t)return#e>#t end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1137 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1138 a.aaaa=e:gsub(t[1],"::",1):gsub("^0::","::"):gsub("::0$","::");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1139 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1140 function e:CNAME(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1141 e.cname=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1142 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1143 function e:MX(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1144 e.pref=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1145 e.mx=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1146 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1147 function e:LOC_nibble_power()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1148 local e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1149 return((e-(e%16))/16)*(10^(e%16));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1150 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1151 function e:LOC(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1152 e.version=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1153 if e.version==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1154 e.loc=e.loc or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1155 e.loc.size=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1156 e.loc.horiz_pre=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1157 e.loc.vert_pre=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1158 e.loc.latitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1159 e.loc.longitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1160 e.loc.altitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1161 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1162 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1163 local function f(e,i,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1164 e=e-2147483648;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1165 if e<0 then i=t;e=-e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1166 local n,t,o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1167 o=e%6e4;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1168 e=(e-o)/6e4;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1169 t=e%60;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1170 n=(e-t)/60;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1171 return a.format('%3d %2d %2.3f %s',n,t,o/1e3,i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1172 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1173 function e.LOC_tostring(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1174 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1175 h(t,a.format(
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1176 '%s %s %.2fm %.2fm %.2fm %.2fm',
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1177 f(e.loc.latitude,'N','S'),
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1178 f(e.loc.longitude,'E','W'),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1179 (e.loc.altitude-1e7)/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1180 e.loc.size/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1181 e.loc.horiz_pre/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1182 e.loc.vert_pre/100
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1183 ));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1184 return n.concat(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1186 function e:NS(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1187 e.ns=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1188 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1189 function e:SOA(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1190 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1191 function e:SRV(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1192 e.srv={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1193 e.srv.priority=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1194 e.srv.weight=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1195 e.srv.port=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1196 e.srv.target=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1197 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1198 function e:PTR(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1199 e.ptr=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1200 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1201 function e:TXT(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1202 e.txt=self:sub(self:byte());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1203 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1204 function e:rr()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1205 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1206 u(e,x);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1207 e.name=self:name(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1208 e.type=t.type[self:word()]or e.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1209 e.class=t.class[self:word()]or e.class;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1210 e.ttl=65536*self:word()+self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1211 e.rdlength=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1212 if e.ttl<=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1213 e.tod=self.time+30;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1214 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1215 e.tod=self.time+e.ttl;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1216 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1217 local a=self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1218 local t=self[t.type[e.type]];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1219 if t then t(self,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1220 self.offset=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1221 e.rdata=self:sub(e.rdlength);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1222 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1223 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1224 function e:rrs(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1225 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1226 for t=1,t do h(e,self:rr());end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1227 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1228 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1229 function e:decode(t,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1230 self.packet,self.offset=t,1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1231 local t=self:header(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1232 if not t then return nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1233 local t={header=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1234 t.question={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1235 local i=self.offset;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1236 for e=1,t.header.qdcount do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1237 h(t.question,self:question());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1238 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1239 t.question.raw=a.sub(self.packet,i,self.offset-1);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1240 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1241 if not self.active[t.header.id]or not self.active[t.header.id][t.question.raw]then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1242 self.active[t.header.id]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1243 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1245 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1246 t.answer=self:rrs(t.header.ancount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1247 t.authority=self:rrs(t.header.nscount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1248 t.additional=self:rrs(t.header.arcount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1249 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1250 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1251 e.delays={1,3};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1252 function e:addnameserver(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1253 self.server=self.server or{};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1254 h(self.server,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1255 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1256 function e:setnameserver(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1257 self.server={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1258 self:addnameserver(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1259 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1260 function e:adddefaultnameservers()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1261 if E then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1262 if w and w.get_nameservers then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1263 for t,e in c(w.get_nameservers())do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1264 self:addnameserver(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1265 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1266 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1267 if not self.server or#self.server==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1268 self:addnameserver("208.67.222.222");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1269 self:addnameserver("208.67.220.220");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1270 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1271 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1272 local e=_.open("/etc/resolv.conf");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1273 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1274 for e in e:lines()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1275 e=e:gsub("#.*$","")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1276 :match('^%s*nameserver%s+([%x:%.]*%%?%S*)%s*$');
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1277 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1278 local e=z(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1279 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1280 self:addnameserver(e.addr);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1281 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1282 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1283 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1284 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1285 if not self.server or#self.server==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1286 self:addnameserver("127.0.0.1");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1287 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1289 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1290 function e:getsocket(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1291 self.socket=self.socket or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1292 self.socketset=self.socketset or{};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1293 local e=self.socket[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1294 if e then return e;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1295 local o,t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1296 local n=self.server[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1297 if n:find(":")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1298 e,t=i.udp6();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1299 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1300 e,t=(i.udp4 or i.udp)();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1301 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1302 if e and self.socket_wrapper then e,t=self.socket_wrapper(e,self);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1303 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1304 return nil,t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1305 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1306 e:settimeout(0);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1307 self.socket[a]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1308 self.socketset[e]=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1309 o,t=e:setsockname('*',0);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1310 if not o then return self:servfail(e,t);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1311 o,t=e:setpeername(n,53);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1312 if not o then return self:servfail(e,t);end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1313 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1314 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1315 function e:voidsocket(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1316 if self.socket[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1317 self.socketset[self.socket[e]]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1318 self.socket[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1319 elseif self.socketset[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1320 self.socket[self.socketset[e]]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1321 self.socketset[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1322 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1323 e:close();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1324 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1325 function e:socket_wrapper_set(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1326 self.socket_wrapper=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1327 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1328 function e:closeall()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1329 for t,e in c(self.socket)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1330 self.socket[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1331 self.socketset[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1332 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1333 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1334 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1335 function e:remember(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1336 local i,o,a=g(e.name,e.type,e.class);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1337 if t~='*'then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1338 t=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1339 local t=r(self.cache,a,'*',i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1340 if t then h(t,e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1341 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1342 self.cache=self.cache or u({},y);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1343 local a=r(self.cache,a,t,i)or
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1344 d(self.cache,a,t,i,u({},j));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1345 if not a[e[o:lower()]]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1346 a[e[o:lower()]]=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1347 h(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1348 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1349 if t=='MX'then self.unsorted[a]=true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1350 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1351 local function f(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1352 return(t.pref==e.pref)and(t.mx<e.mx)or(t.pref<e.pref);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1353 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1354 function e:peek(o,a,t,h)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1355 o,a,t=g(o,a,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1356 local e=r(self.cache,t,a,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1357 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1358 if h then if h<=0 then return end else h=3 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1359 e=r(self.cache,t,"CNAME",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1360 if not(e and e[1])then return end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1361 return self:peek(e[1].cname,a,t,h-1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1362 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1363 if p(e,i.gettime())and a=='*'or not s(e)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1364 d(self.cache,t,a,o,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1365 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1366 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1367 if self.unsorted[e]then n.sort(e,f);self.unsorted[e]=nil;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1368 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1370 function e:purge(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1371 if e=='soft'then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1372 self.time=i.gettime();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1373 for t,e in o(self.cache or{})do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1374 for t,e in o(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1375 for t,e in o(e)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1376 p(e,self.time,'soft')
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1377 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1378 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1379 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1380 else self.cache=u({},y);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1381 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1382 function e:query(e,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1383 e,a,t=g(e,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1384 local n=l.running();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1385 local o=r(self.wanted,t,a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1386 if n and o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1387 d(self.wanted,t,a,e,n,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1388 return true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1389 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1390 if not self.server then self:adddefaultnameservers();end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1391 local s=T(e,a,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1392 local o=self:peek(e,a,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1393 if o then return o;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1394 local h,o=v();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1395 local i={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1396 packet=h..s,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1397 server=self.best_server,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1398 delay=1,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1399 retry=i.gettime()+self.delays[1]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1400 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1401 self.active[o]=self.active[o]or{};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1402 self.active[o][s]=i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1403 local o,h=self:getsocket(i.server)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1404 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1405 return nil,h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1406 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1407 o:send(i.packet)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1408 if n then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1409 d(self.wanted,t,a,e,n,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1410 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1411 if k and self.timeout then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1412 local d=#self.server;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1413 local s=1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1414 k.add_task(self.timeout,function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1415 if r(self.wanted,t,a,e,n)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1416 if s<d then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1417 s=s+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1418 self:servfail(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1419 i.server=self.best_server;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1420 o,h=self:getsocket(i.server);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1421 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1422 o:send(i.packet);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1423 return self.timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1424 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1425 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1426 self:cancel(t,a,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1427 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1428 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1429 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1430 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1431 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1432 function e:servfail(t,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1433 local h=self.socketset[t]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1434 t=self:voidsocket(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1435 self.time=i.gettime();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1436 for i,a in o(self.active)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1437 for o,e in o(a)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1438 if e.server==h then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1439 e.server=e.server+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1440 if e.server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1441 e.server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1443 e.retries=(e.retries or 0)+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1444 if e.retries>=#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1445 a[o]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1446 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1447 t,n=self:getsocket(e.server);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1448 if t then t:send(e.packet);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1449 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1450 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1451 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1452 if s(a)==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1453 self.active[i]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1454 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1455 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1456 if h==self.best_server then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1457 self.best_server=self.best_server+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1458 if self.best_server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1459 self.best_server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1460 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1461 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1462 return t,n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1463 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1464 function e:settimeout(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1465 self.timeout=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1466 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1467 function e:receive(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1468 self.time=i.gettime();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1469 t=t or self.socket;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1470 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1471 for a,t in o(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1472 if self.socketset[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1473 local t=t:receive();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1474 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1475 e=self:decode(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1476 if e and self.active[e.header.id]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1477 and self.active[e.header.id][e.question.raw]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1478 for a,t in o(e.answer)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1479 if t.name:sub(-#e.question[1].name,-1)==e.question[1].name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1480 self:remember(t,e.question[1].type)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1481 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1482 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1483 local t=self.active[e.header.id];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1484 t[e.question.raw]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1485 if not s(t)then self.active[e.header.id]=nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1486 if not s(self.active)then self:closeall();end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1487 local e=e.question[1];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1488 local t=r(self.wanted,e.class,e.type,e.name);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1489 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1490 for e in o(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1491 if l.status(e)=="suspended"then l.resume(e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1492 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1493 d(self.wanted,e.class,e.type,e.name,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1494 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1495 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1496 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1497 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1498 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1499 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1500 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1501 function e:feed(a,e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1502 self.time=i.gettime();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1503 local e=self:decode(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1504 if e and self.active[e.header.id]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1505 and self.active[e.header.id][e.question.raw]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1506 for a,t in o(e.answer)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1507 self:remember(t,e.question[1].type);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1508 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1509 local t=self.active[e.header.id];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1510 t[e.question.raw]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1511 if not s(t)then self.active[e.header.id]=nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1512 if not s(self.active)then self:closeall();end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1513 local e=e.question[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1514 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1515 local t=r(self.wanted,e.class,e.type,e.name);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1516 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1517 for e in o(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1518 if l.status(e)=="suspended"then l.resume(e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1519 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1520 d(self.wanted,e.class,e.type,e.name,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1521 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1522 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1523 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1524 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1525 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1526 function e:cancel(t,a,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1527 local e=r(self.wanted,t,a,i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1528 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1529 for e in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1530 if l.status(e)=="suspended"then l.resume(e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1531 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1532 d(self.wanted,t,a,i,nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1533 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1534 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1535 function e:pulse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1536 while self:receive()do end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1537 if not s(self.active)then return nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1538 self.time=i.gettime();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1539 for a,t in o(self.active)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1540 for o,e in o(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1541 if self.time>=e.retry then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1542 e.server=e.server+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1543 if e.server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1544 e.server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1545 e.delay=e.delay+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1546 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1547 if e.delay>#self.delays then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1548 t[o]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1549 if not s(t)then self.active[a]=nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1550 if not s(self.active)then return nil;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1551 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1552 local t=self.socket[e.server];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1553 if t then t:send(e.packet);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1554 e.retry=self.time+self.delays[e.delay];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1556 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1557 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1558 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1559 if s(self.active)then return true;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1560 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1561 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1562 function e:lookup(o,a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1563 self:query(o,a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1564 while self:pulse()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1565 local e={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1566 for t,a in c(self.socket)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1567 e[t]=a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1568 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1569 i.select(e,nil,4)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1570 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1571 return self:peek(o,a,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1572 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1573 function e:lookupex(o,t,e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1574 return self:peek(t,e,a)or self:query(t,e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1576 function e:tohostname(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1577 return t.lookup(e:gsub("(%d+)%.(%d+)%.(%d+)%.(%d+)","%4.%3.%2.%1.in-addr.arpa."),"PTR");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1578 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1579 local i={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1580 qr={[0]='query','response'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1581 opcode={[0]='query','inverse query','server status request'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1582 aa={[0]='non-authoritative','authoritative'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1583 tc={[0]='complete','truncated'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1584 rd={[0]='recursion not desired','recursion desired'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1585 ra={[0]='recursion not available','recursion available'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1586 z={[0]='(reserved)'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1587 rcode={[0]='no error','format error','server failure','name error','not implemented'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1588 type=t.type,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1589 class=t.class
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1590 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1591 local function n(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1592 return(i[e]and i[e][t[e]])or'';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1593 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1594 function e.print(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1595 for o,t in o{'id','qr','opcode','aa','tc','rd','ra','z',
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1596 'rcode','qdcount','ancount','nscount','arcount'}do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1597 m(a.format('%-30s','header.'..t),e.header[t],n(e.header,t));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1598 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1599 for e,t in c(e.question)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1600 m(a.format('question[%i].name ',e),t.name);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1601 m(a.format('question[%i].type ',e),t.type);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1602 m(a.format('question[%i].class ',e),t.class);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1603 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1604 local h={name=1,type=1,class=1,ttl=1,rdlength=1,rdata=1};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1605 local t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1606 for s,i in o({'answer','authority','additional'})do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1607 for s,e in o(e[i])do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1608 for h,o in o({'name','type','class','ttl','rdlength'})do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1609 t=a.format('%s[%i].%s',i,s,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1610 m(a.format('%-30s',t),e[o],n(e,o));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1611 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1612 for e,o in o(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1613 if not h[e]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1614 t=a.format('%s[%i].%s',i,s,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1615 m(a.format('%-30s %s',b(t),b(o)));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1616 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1617 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1618 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1619 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1620 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1621 function t.resolver()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1622 local t={active={},cache={},unsorted={},wanted={},best_server=1};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1623 u(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1624 u(t.cache,y);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1625 u(t.unsorted,{__mode='kv'});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1626 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1627 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1628 local e=t.resolver();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1629 t._resolver=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1630 function t.lookup(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1631 return e:lookup(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1632 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1633 function t.tohostname(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1634 return e:tohostname(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1635 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1636 function t.purge(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1637 return e:purge(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1638 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1639 function t.peek(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1640 return e:peek(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1641 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1642 function t.query(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1643 return e:query(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1644 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1645 function t.feed(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1646 return e:feed(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1647 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1648 function t.cancel(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1649 return e:cancel(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1650 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1651 function t.settimeout(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1652 return e:settimeout(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1653 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1654 function t.cache()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1655 return e.cache;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1656 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1657 function t.socket_wrapper_set(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1658 return e:socket_wrapper_set(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1659 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1660 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1661 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1662 package.preload['net.adns']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1663 local c=require"net.server";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1664 local a=require"net.dns";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1665 local e=require"util.logger".init("adns");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1666 local o,r,l=coroutine,tostring,pcall;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1667 local function m(a,a,t,e)return(e-t)+1;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1668 local t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1669 local function u(d,t,s,h)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1670 return o.wrap(function(i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1671 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1672 e("debug","Records for %s already cached, using those...",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1673 d(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1674 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1675 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1676 e("debug","Records for %s not in cache, sending query (%s)...",t,r(o.running()));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1677 local n,i=a.query(t,s,h);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1678 if n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1679 o.yield({h or"IN",s or"A",t,o.running()});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1680 e("debug","Reply for %s (%s)",t,r(o.running()));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1681 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1682 if n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1683 n,i=l(d,a.peek(t,s,h));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1684 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1685 e("error","Error sending DNS query: %s",i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1686 n,i=l(d,nil,i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1687 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1688 if not n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1689 e("error","Error in DNS response handler: %s",r(i));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1690 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1691 end)(a.peek(t,s,h));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1692 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1693 local function d(t,o,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1694 e("warn","Cancelling DNS lookup for %s",r(t[3]));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1695 a.cancel(t[1],t[2],t[3],t[4],o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1696 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1697 local function r(o,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1698 local n="<unknown>";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1699 local s={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1700 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1701 local h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1702 function s.onincoming(o,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1703 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1704 a.feed(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1705 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1706 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1707 function s.ondisconnect(o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1708 if a then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1709 e("warn","DNS socket for %s disconnected: %s",n,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1710 local t=i.server;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1711 if i.socketset[o]==i.best_server and i.best_server==#t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1712 e("error","Exhausted all %d configured DNS servers, next lookup will try %s again",#t,t[1]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1713 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1714 i:servfail(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1715 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1716 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1717 t,h=c.wrapclient(o,"dns",53,s);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1718 if not t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1719 return nil,h;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1720 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1721 t.settimeout=function()end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1722 t.setsockname=function(e,...)return o:setsockname(...);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1723 t.setpeername=function(e,...)n=(...);local a,o=o:setpeername(...);e:set_send(m);return a,o;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1724 t.connect=function(e,...)return o:connect(...)end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1725 t.send=function(a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1726 e("debug","Sending DNS query to %s",n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1727 return o:send(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1728 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1729 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1730 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1731 a.socket_wrapper_set(r);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1732 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1733 lookup=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1734 cancel=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1735 new_async_socket=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1736 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1737 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1738 package.preload['net.server']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1739 local c=function(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1740 return _G[e]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1741 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1742 local Y,e=require("util.logger").init("socket"),table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1743 local i=function(...)return Y("debug",e{...});end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1744 local L=function(...)return Y("warn",e{...});end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1745 local he=1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1746 local w=c"type"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1747 local D=c"pairs"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1748 local ee=c"ipairs"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1749 local f=c"tonumber"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1750 local r=c"tostring"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1751 local a=c"table"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1752 local t=c"string"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1753 local e=c"coroutine"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1754 local Z=math.min
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1755 local ue=math.huge
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1756 local we=a.concat
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1757 local fe=t.sub
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1758 local me=e.wrap
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1759 local ye=e.yield
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1760 local U,e=pcall(require,"ssl")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1761 local p=c"socket"or require"socket"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1762 local X=p.gettime
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1763 local pe=p.dns.getaddrinfo
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1764 local be=(U and e.wrap)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1765 local de=p.bind
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1766 local ve=p.sleep
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1767 local ce=p.select
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1768 local V
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1769 local P
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1770 local le
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1771 local B
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1772 local K
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1773 local m
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1774 local re
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1775 local oe
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1776 local ae
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1777 local te
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1778 local ie
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1779 local G
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1780 local d
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1781 local se
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1782 local Q
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1783 local ne
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1784 local v
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1785 local h
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1786 local F
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1787 local l
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1788 local s
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1789 local _
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1790 local b
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1791 local y
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1792 local k
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1793 local x
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1794 local a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1795 local o
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1796 local g
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1797 local W
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1798 local M
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1799 local I
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1800 local O
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1801 local j
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1802 local A
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1803 local J
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1804 local n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1805 local E
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1806 local T
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1807 local N
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1808 local H
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1809 local S
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1810 local C
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1811 local q
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1812 local z
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1813 local R
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1814 v={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1815 h={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1816 l={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1817 F={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1818 s={}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1819 b={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1820 y={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1821 _={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1822 k={}
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1823 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1824 o=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1825 g=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1826 W=0
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1827 M=0
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1828 I=1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1829 O=0
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1830 j=128
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1831 A=10
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1832 E=51e3*1024
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1833 T=25e3*1024
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1834 N=30
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1835 H=6e4
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1836 S=6*60*60
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1837 local e=package.config:sub(1,1)=="\\"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1838 z=(e and math.huge)or p._SETSIZE or 1024
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1839 q=p._SETSIZE or 1024
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1840 R=30
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1841 te=function(y,t,c,u,g,w)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1842 if t:getfd()>=z then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1843 L("server.lua: Disallowed FD number: "..t:getfd())
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1844 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1845 return nil,"fd-too-large"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1846 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1847 local f=0
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1848 local p,e=y.onconnect,y.ondisconnect
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1849 local b=t.accept
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1850 local e={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1851 e.shutdown=function()end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1852 e.ssl=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1853 return w~=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1854 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1855 e.sslctx=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1856 return w
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1857 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1858 e.remove=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1859 f=f-1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1860 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1861 e.resume()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1862 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1863 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1864 e.close=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1865 t:close()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1866 o=d(l,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1867 a=d(h,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1868 v[c..":"..u]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1869 s[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1870 e=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1871 t=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1872 i"server.lua: closed server handler and removed sockets from list"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1873 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1874 e.pause=function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1875 if not e.paused then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1876 a=d(h,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1877 if o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1878 s[t]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1879 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1880 t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1881 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1882 e.paused=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1883 i("server.lua: server [",c,"]:",u," paused")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1884 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1885 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1886 e.resume=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1887 if e.paused then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1888 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1889 t=de(c,u,j);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1890 t:settimeout(0)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1891 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1892 a=m(h,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1893 s[t]=e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1894 k[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1895 e.paused=false;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1896 i("server.lua: server [",c,"]:",u," resumed")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1897 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1898 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1899 e.ip=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1900 return c
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1901 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1902 e.serverport=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1903 return u
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1904 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1905 e.socket=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1906 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1907 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1908 e.readbuffer=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1909 if a>=q or o>=q then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1910 e.pause()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1911 k[e]=n
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1912 i("server.lua: refused new client connection: server full")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1913 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1914 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1915 local t,s=b(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1916 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1917 local o,a=t:getpeername()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1918 local e,n,t=Q(e,y,t,o,u,a,g,w)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1919 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1920 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1921 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1922 f=f+1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1923 i("server.lua: accepted new client connection from ",r(o),":",r(a)," to ",r(u))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1924 if p and not w then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1925 return p(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1926 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1927 return;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1928 elseif s then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1929 i("server.lua: error with new client connection: ",r(s))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1930 e.pause()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1931 k[e]=n
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1932 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1933 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1934 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1935 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1936 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1937 Q=function(v,f,t,O,J,I,N,g)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1938 if t:getfd()>=z then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1939 L("server.lua: Disallowed FD number: "..t:getfd())
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1940 t:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1941 if v then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1942 k[v]=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1943 v.pause()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1944 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1945 return nil,nil,"fd-too-large"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1946 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1947 t:settimeout(0)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1948 local w
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1949 local z
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1950 local q
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1951 local Y
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1952 local P=f.onincoming
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1953 local F=f.onstatus
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1954 local k=f.ondisconnect
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1955 local L=f.ondrain
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1956 local Q=f.onreadtimeout;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1957 local C=f.ondetach
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1958 local p={}
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1959 local u=0
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1960 local G
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1961 local K
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1962 local D
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1963 local c=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1964 local j=false
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1965 local A=false
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1966 local S,H=0,0
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1967 local E=E
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1968 local T=T
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1969 local e=p
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1970 e.dispatch=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1971 return P
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1972 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1973 e.disconnect=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1974 return k
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1975 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1976 e.onreadtimeout=Q;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1977 e.setlistener=function(a,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1978 if C then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1979 C(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1980 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1981 P=t.onincoming
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1982 k=t.ondisconnect
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1983 F=t.onstatus
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1984 L=t.ondrain
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1985 e.onreadtimeout=t.onreadtimeout
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1986 C=t.ondetach
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1987 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1988 e.getstats=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1989 return H,S
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1990 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1991 e.ssl=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1992 return Y
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1993 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1994 e.sslctx=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1995 return g
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1996 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1997 e.send=function(n,o,i,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
1998 return w(t,o,i,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1999 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2000 e.receive=function(o,a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2001 return z(t,o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2002 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2003 e.shutdown=function(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2004 return q(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2006 e.setoption=function(i,a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2007 if t.setoption then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2008 return t:setoption(a,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2009 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2010 return false,"setoption not implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2011 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2012 e.force_close=function(a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2013 if u~=0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2014 i("server.lua: discarding unwritten data for ",r(O),":",r(I))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2015 u=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2016 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2017 return a:close(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2018 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2019 e.close=function(r,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2020 if not e then return true;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2021 a=d(h,t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2022 b[e]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2023 if u~=0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2024 e.sendbuffer()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2025 if u~=0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2026 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2027 e.write=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2028 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2029 G=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2030 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2031 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2032 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2033 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2034 x=q and q(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2035 t:close()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2036 o=d(l,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2037 s[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2038 t=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2039 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2040 i"server.lua: socket already closed"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2041 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2042 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2043 y[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2044 _[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2045 local t=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2046 e=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2047 if k then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2048 k(t,n or false);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2049 k=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2050 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2051 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2052 if v then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2053 v.remove()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2054 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2055 i"server.lua: closed client handler and removed socket from list"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2056 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2057 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2058 e.server=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2059 return v
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2060 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2061 e.ip=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2062 return O
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2063 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2064 e.serverport=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2065 return J
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2066 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2067 e.clientport=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2068 return I
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2069 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2070 e.port=e.clientport
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2071 local v=function(i,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2072 if not e then return false end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2073 c=c+#a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2074 if c>E then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2075 _[e]="send buffer exceeded"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2076 e.write=B
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2077 return false
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2078 elseif t and not l[t]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2079 o=m(l,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2080 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2081 u=u+1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2082 p[u]=a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2083 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2084 y[e]=y[e]or n
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2085 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2086 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2087 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2088 e.write=v
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2089 e.bufferqueue=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2090 return p
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2091 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2092 e.socket=function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2093 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2094 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2095 e.set_mode=function(a,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2096 N=t or N
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2097 return N
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2098 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2099 e.set_send=function(a,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2100 w=t or w
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2101 return w
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2102 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2103 e.bufferlen=function(o,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2104 E=a or E
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2105 T=t or T
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2106 return c,T,E
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2107 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2108 e.lock_read=function(i,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2109 if o==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2110 local o=a
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2111 a=d(h,t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2112 b[e]=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2113 if a~=o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2114 j=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2115 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2116 elseif o==false then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2117 if j then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2118 j=false
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2119 a=m(h,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2120 b[e]=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2121 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2122 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2123 return j
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2125 e.pause=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2126 return t:lock_read(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2127 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2128 e.resume=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2129 return t:lock_read(false);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2130 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2131 e.lock=function(i,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2132 e.lock_read(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2133 if a==true then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2134 e.write=B
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2135 local a=o
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2136 o=d(l,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2137 y[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2138 if o~=a then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2139 A=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2140 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2141 elseif a==false then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2142 e.write=v
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2143 if A then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2144 A=false
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2145 v("")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2146 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2147 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2148 return j,A
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2149 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2150 local v=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2151 local a,t,o=z(t,N)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2152 if not t or(t=="wantread"or t=="timeout")then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2153 local a=a or o or""
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2154 local o=#a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2155 if o>T then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2156 e:close("receive buffer exceeded")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2157 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2158 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2159 local o=o*he
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2160 H=H+o
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2161 M=M+o
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2162 b[e]=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2163 return P(e,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2164 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2165 i("server.lua: client ",r(O),":",r(I)," read error: ",r(t))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2166 K=true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2167 x=e and e:force_close(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2168 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2169 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2170 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2171 local y=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2172 local f,a,s,h,m;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2173 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2174 h=we(p,"",1,u)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2175 f,a,s=w(t,h,1,c)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2176 m=(f or s or 0)*he
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2177 S=S+m
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2178 W=W+m
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2179 for e=u,1,-1 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2180 p[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2181 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2182 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2183 f,a,m=false,"unexpected close",0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2184 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2185 if f then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2186 u=0
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2187 c=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2188 o=d(l,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2189 y[e]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2190 if L then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2191 L(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2192 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2193 x=D and e:starttls(nil)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2194 x=G and e:force_close()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2195 return true
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2196 elseif s and(a=="timeout"or a=="wantwrite")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2197 h=fe(h,s+1,c)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2198 p[1]=h
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2199 u=1
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2200 c=c-s
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2201 y[e]=n
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2202 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2203 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2204 i("server.lua: client ",r(O),":",r(I)," write error: ",r(a))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2205 K=true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2206 x=e and e:force_close(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2207 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2209 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2210 local c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2211 function e.set_sslctx(w,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2212 g=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2213 local s,r
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2214 c=me(function(n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2215 local t
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2216 for c=1,R do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2217 o=(r and d(l,n,o))or o
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2218 a=(s and d(h,n,a))or a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2219 s,r=nil,nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2220 c,t=n:dohandshake()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2221 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2222 i("server.lua: ssl handshake done")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2223 e.readbuffer=v
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2224 e.sendbuffer=y
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2225 c=F and F(e,"ssl-handshake-complete")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2226 if w.autostart_ssl and f.onconnect then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2227 f.onconnect(w);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2228 if u~=0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2229 o=m(l,n,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2230 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2231 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2232 a=m(h,n,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2233 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2234 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2235 if t=="wantwrite"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2236 o=m(l,n,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2237 r=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2238 elseif t=="wantread"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2239 a=m(h,n,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2240 s=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2241 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2242 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2244 t=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2245 ye()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2246 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2247 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2248 t="ssl handshake error: "..(t or"handshake too long");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2249 i("server.lua: ",t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2250 x=e and e:force_close(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2251 return false,t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2253 )
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2254 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2255 if U then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2256 e.starttls=function(f,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2257 if n then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2258 e:set_sslctx(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2259 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2260 if u>0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2261 i"server.lua: we need to do tls, but delaying until send buffer empty"
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2262 D=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2263 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2264 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2265 i("server.lua: attempting to start tls on "..r(t))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2266 local n,u=t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2267 t,u=be(t,g)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2268 if not t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2269 i("server.lua: error while starting tls on client: ",r(u or"unknown error"))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2270 return nil,u
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2271 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2272 t:settimeout(0)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2273 w=t.send
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2274 z=t.receive
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2275 q=V
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2276 s[t]=e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2277 a=m(h,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2278 a=d(h,n,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2279 o=d(l,n,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2280 s[n]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2281 e.starttls=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2282 D=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2283 Y=true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2284 e.readbuffer=c
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2285 e.sendbuffer=c
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2286 return c(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2287 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2288 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2289 e.readbuffer=v
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2290 e.sendbuffer=y
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2291 w=t.send
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2292 z=t.receive
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2293 q=(Y and V)or t.shutdown
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2294 s[t]=e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2295 a=m(h,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2296 if g and U then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2297 i"server.lua: auto-starting ssl negotiation..."
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2298 e.autostart_ssl=true;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2299 local e,t=e:starttls(g);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2300 if e==false then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2301 return nil,nil,t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2302 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2303 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2304 return e,t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2305 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2306 V=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2307 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2308 B=function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2309 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2310 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2311 m=function(a,t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2312 if not a[t]then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2313 e=e+1
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2314 a[e]=t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2315 a[t]=e
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2317 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2318 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2319 d=function(e,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2320 local i=e[a]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2321 if i then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2322 e[a]=nil
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2323 local o=e[t]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2324 e[t]=nil
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2325 if o~=a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2326 e[o]=i
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2327 e[i]=o
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2328 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2329 return t-1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2330 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2331 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2332 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2333 G=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2334 o=d(l,e,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2335 a=d(h,e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2336 s[e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2337 e:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2338 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2339 local function x(e,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2340 local a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2341 local i=t.sendbuffer;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2342 function t.sendbuffer()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2343 i();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2344 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
2345 e:lock_read(false);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2346 a=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2347 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2348 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2349 local i=e.readbuffer;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2350 function e.readbuffer()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2351 i();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2352 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
2353 a=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2354 e:lock_read(true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2355 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2356 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2357 e:set_mode("*a");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2358 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2359 re=function(e,t,d,l,r)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2360 e=e or"*"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2361 local o
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2362 if w(d)~="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2363 o="invalid listener table"
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2364 elseif w(e)~="string"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2365 o="invalid address"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2366 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
2367 o="invalid port"
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2368 elseif v[e..":"..t]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2369 o="listeners on '["..e.."]:"..t.."' already exist"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2370 elseif r and not U then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2371 o="luasec not found"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2372 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2373 if o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2374 L("server.lua, [",e,"]:",t,": ",o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2375 return nil,o
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2376 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2377 local o,n=de(e,t,j)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2378 if n then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2379 L("server.lua, [",e,"]:",t,": ",n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2380 return nil,n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2381 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2382 local n,d=te(d,o,e,t,l,r)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2383 if not n then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2384 o:close()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2385 return nil,d
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2386 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2387 o:settimeout(0)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2388 a=m(h,o,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2389 v[e..":"..t]=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2390 s[o]=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2391 i("server.lua: new "..(r and"ssl "or"").."server listener on '[",e,"]:",t,"'")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2392 return n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2393 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2394 ae=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2395 return v[t..":"..e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2396 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2397 se=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2398 local a=v[t..":"..e]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2399 if not a then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2400 return nil,"no server found on '["..t.."]:"..r(e).."'"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2401 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2402 a:close()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2403 v[t..":"..e]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2404 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2405 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2406 K=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2407 for t,e in D(s)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2408 e:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2409 s[t]=nil
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2410 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2411 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2412 o=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2413 g=0
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2414 v={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2415 h={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2416 l={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2417 F={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2418 s={}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2419 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2420 ie=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2421 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2422 select_timeout=I;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2423 select_sleep_time=O;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2424 tcp_backlog=j;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2425 max_send_buffer_size=E;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2426 max_receive_buffer_size=T;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2427 select_idle_check_interval=N;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2428 send_timeout=H;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2429 read_timeout=S;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2430 max_connections=q;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2431 max_ssl_handshake_roundtrips=R;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2432 highest_allowed_fd=z;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2433 accept_retry_interval=A;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2434 }
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2435 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2436 ne=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2437 if w(e)~="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2438 return nil,"invalid settings table"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2439 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2440 I=f(e.select_timeout)or I
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2441 O=f(e.select_sleep_time)or O
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2442 E=f(e.max_send_buffer_size)or E
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2443 T=f(e.max_receive_buffer_size)or T
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2444 N=f(e.select_idle_check_interval)or N
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2445 j=f(e.tcp_backlog)or j
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2446 H=f(e.send_timeout)or H
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2447 S=f(e.read_timeout)or S
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2448 A=f(e.accept_retry_interval)or A
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2449 q=e.max_connections or q
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2450 R=e.max_ssl_handshake_roundtrips or R
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2451 z=e.highest_allowed_fd or z
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2452 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2453 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2454 oe=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2455 if w(e)~="function"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2456 return nil,"invalid listener function"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2457 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2458 g=g+1
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2459 F[g]=e
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2460 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2461 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2462 le=function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2463 return M,W,a,o,g
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2464 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2465 local t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2466 local function f(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2467 t=not not e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2468 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2469 P=function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2470 if t then return"quitting";end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2471 if a then t="once";end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2472 local e=ue;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2473 repeat
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2474 local o,a,h=ce(h,l,Z(I,e))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2475 for e,t in ee(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2476 local e=s[t]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2477 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2478 e.sendbuffer()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2479 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2480 G(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2481 i"server.lua: found no handler and closed socket (writelist)"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2482 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2483 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2484 for e,t in ee(o)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2485 local e=s[t]
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2486 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2487 e.readbuffer()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2488 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2489 G(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2490 i"server.lua: found no handler and closed socket (readlist)"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2491 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2492 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2493 for e,t in D(_)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2494 e.disconnect()(e,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2495 e:force_close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2496 _[e]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2497 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2498 n=X()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2499 if n-J>N then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2500 J=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2501 for e,t in D(y)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2502 if n-t>H then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2503 e.disconnect()(e,"send timeout")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2504 e:force_close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2505 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2506 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2507 for e,t in D(b)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2508 if n-t>S then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2509 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
2510 e.disconnect()(e,"read timeout")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2511 e:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2512 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2513 b[e]=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2514 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2515 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2516 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2517 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2518 if n-C>=Z(e,1)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2519 e=ue;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2520 for t=1,g do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2521 local t=F[t](n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2522 if t then e=Z(e,t);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2523 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2524 C=n
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2525 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2526 e=e-(n-C);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2527 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2528 for e,t in D(k)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2529 if n-t>A then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2530 k[e]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2531 e.resume();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2532 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2533 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2534 ve(O)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2535 until t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2536 if a and t=="once"then t=nil;return;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2537 K();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2538 return"quitting"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2539 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2540 local function u()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2541 return P(true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2542 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2543 local function d()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2544 return"select";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2545 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2546 local i=function(e,a,h,t,n,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2547 local e,a,n=Q(nil,t,e,a,h,"clientport",n,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2548 if not e then return nil,n end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2549 s[a]=e
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2550 if not i then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2551 o=m(l,a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2552 if t.onconnect then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2553 local a=e.sendbuffer;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2554 e.sendbuffer=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2555 e.sendbuffer=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2556 t.onconnect(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2557 return a();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2558 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2559 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2560 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2561 return e,a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2562 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2563 local o=function(o,t,s,r,n,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2564 local e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2565 if w(s)~="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2566 e="invalid listener table"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2567 elseif w(o)~="string"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2568 e="invalid address"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2569 elseif w(t)~="number"or not(t>=0 and t<=65535)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2570 e="invalid port"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2571 elseif n and not U then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2572 e="luasec not found"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2573 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2574 if not a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2575 local e,t=pe(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2576 if not e then return nil,t end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2577 if e[1]and e[1].family=="inet6"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2578 a="tcp6"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2579 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2580 a="tcp"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2581 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2582 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2583 local a=p[a]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2584 if w(a)~="function"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2585 e="invalid socket type"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2586 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2587 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2588 L("server.lua, addclient: ",e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2589 return nil,e
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2590 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2591 local e,a=a()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2592 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2593 return nil,a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2594 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2595 e:settimeout(0)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2596 local h,a=e:connect(o,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2597 if h or a=="timeout"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2598 return i(e,o,t,s,r,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2599 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2600 return nil,a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2601 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2602 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2603 c"setmetatable"(s,{__mode="k"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2604 c"setmetatable"(b,{__mode="k"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2605 c"setmetatable"(y,{__mode="k"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2606 C=X()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2607 J=X()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2608 local function a(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2609 local t=Y;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2610 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2611 Y=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2612 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2613 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2614 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2615 return{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2616 _addtimer=oe,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2617 addclient=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2618 wrapclient=i,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2619 loop=P,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2620 link=x,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2621 step=u,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2622 stats=le,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2623 closeall=K,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2624 addserver=re,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2625 getserver=ae,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2626 setlogger=a,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2627 getsettings=ie,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2628 setquitting=f,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2629 removeserver=se,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2630 get_backend=d,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2631 changesettings=ne,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2632 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2633 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2634 package.preload['util.xmppstream']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2635 local e=require"lxp";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2636 local b=require"util.stanza";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2637 local k=b.stanza_mt;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2638 local m=error;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2639 local t=tostring;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2640 local d=table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2641 local p=table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2642 local x=table.remove;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2643 local v=setmetatable;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2644 local q=pcall(e.new,{StartDoctypeDecl=false});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2645 local j=pcall(e.new,{XmlDecl=false});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2646 local a=not not e.new({}).getcurrentbytecount;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2647 local z=1024*1024*10;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2648 local o=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2649 local y=e.new;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2650 local _={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2651 ["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
2652 ["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
2653 ["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
2654 ["http://www.w3.org/XML/1998/namespace\1id"]="xml:id";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2655 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2656 local s="http://etherx.jabber.org/streams";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2657 local r="\1";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2658 local g="^([^"..r.."]*)"..r.."?(.*)$";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2659 local function h()end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2660 local function w(i,e,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2661 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2662 local w=e.streamopened;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2663 local f=e.streamclosed;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2664 local l=e.error or function(o,a,e)m("XML stream error: "..t(a)..(e and": "..t(e)or""),2);end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2665 local y=e.handlestanza;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2666 n=n or h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2667 local t=e.stream_ns or s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2668 local c=e.stream_tag or"stream";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2669 if t~=""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2670 c=t..r..c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2671 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2672 local b=t..r..(e.error_tag or"error");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2673 local z=e.default_ns;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2674 local u={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2675 local s,e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2676 local t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2677 local h=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2678 function o:StartElement(m,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2679 if e and#s>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2680 d(e,p(s));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2681 s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2682 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2683 local r,s=m:match(g);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2684 if s==""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2685 r,s="",r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2686 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2687 if r~=z or h>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2688 o.xmlns=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2689 h=h+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2690 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2691 for t=1,#o do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2692 local e=o[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2693 o[t]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2694 local t=_[e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2695 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2696 o[t]=o[e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2697 o[e]=nil;
12
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2700 if not e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2701 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2702 t=self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2703 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2704 if i.notopen then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2705 if m==c then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2706 h=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2707 if w then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2708 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2709 n(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2710 t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2711 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2712 w(i,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2713 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2714 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2715 l(i,"no-stream",m);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2716 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2717 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2718 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2719 if r=="jabber:client"and s~="iq"and s~="presence"and s~="message"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2720 l(i,"invalid-top-level-element");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2721 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2722 e=v({name=s,attr=o,tags={}},k);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2723 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2724 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2725 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2726 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2727 d(u,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2728 local t=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2729 e=v({name=s,attr=o,tags={}},k);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2730 d(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2731 d(t.tags,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2732 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2733 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2734 if j then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2735 function o:XmlDecl(e,e,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2736 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2737 n(self:getcurrentbytecount());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2738 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2739 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2740 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2741 function o:StartCdataSection()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2742 if a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2743 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2744 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2745 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2746 n(self:getcurrentbytecount());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2747 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2748 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2749 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2750 function o:EndCdataSection()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2751 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2752 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2753 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2754 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2755 n(self:getcurrentbytecount());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2756 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2757 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2758 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2759 function o:CharacterData(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2760 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2761 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2762 t=t+self:getcurrentbytecount();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2763 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2764 d(s,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2765 elseif a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2766 n(self:getcurrentbytecount());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2767 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2768 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2769 function o:EndElement(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2770 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2771 t=t+self:getcurrentbytecount()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2772 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2773 if h>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2774 h=h-1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2775 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2776 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2777 if#s>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2778 d(e,p(s));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2779 s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2780 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2781 if#u==0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2782 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2783 n(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2784 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2785 t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2786 if o~=b then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2787 y(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2788 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2789 l(i,"stream-error",e);
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=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2792 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2793 e=x(u);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2794 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2795 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2796 if f then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2797 f(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2798 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2799 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2800 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2801 local function a(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2802 l(i,"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
2803 if not e.stop or not e:stop()then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2804 m("Failed to abort parsing");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2805 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2806 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2807 if q then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2808 o.StartDoctypeDecl=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2809 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2810 o.Comment=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2811 o.ProcessingInstruction=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2812 local function a()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2813 e,s,t=nil,{},0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2814 u={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2815 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2816 local function t(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2817 i=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2818 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2819 return o,{reset=a,set_session=t};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2820 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2821 local function u(d,l,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2822 local t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2823 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2824 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2825 function e(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2826 t=t-e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2827 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2828 o=o or z;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2829 elseif o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2830 m("Stanza size limits are not supported on this version of LuaExpat")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2831 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2832 local n,s=w(d,l,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2833 local i=y(n,r,false);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2834 local h=i.parse;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2835 function d.open_stream(e,a,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2836 local o=e.sends2s or e.send;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2837 local t={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2838 ["xmlns:stream"]="http://etherx.jabber.org/streams",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2839 ["xml:lang"]="en",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2840 xmlns=l.default_ns,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2841 version=e.version and(e.version>0 and"1.0"or nil),
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2842 id=e.streamid,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2843 from=a or e.host,to=i,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2844 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2845 if e.stream_attrs then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2846 e:stream_attrs(a,i,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2847 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2848 o("<?xml version='1.0'?>");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2849 o(b.stanza("stream:stream",t):top_tag());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2850 return true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2851 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2852 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2853 reset=function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2854 i=y(n,r,false);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2855 h=i.parse;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2856 t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2857 s.reset();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2858 end,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2859 feed=function(n,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2860 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2861 t=t+#e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2862 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2863 local i,e=h(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2864 if a and t>o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2865 return nil,"stanza-too-large";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2866 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2867 return i,e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2868 end,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2869 set_session=s.set_session;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2870 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2871 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2872 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2873 ns_separator=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2874 ns_pattern=g;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2875 new_sax_handlers=w;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2876 new=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2877 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2878 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2879 package.preload['util.jid']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2880 local o=select;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2881 local a,i=string.match,string.sub;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2882 local l=require"util.encodings".stringprep.nodeprep;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2883 local r=require"util.encodings".stringprep.nameprep;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2884 local d=require"util.encodings".stringprep.resourceprep;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2885 local h={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2886 [" "]="\\20";['"']="\\22";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2887 ["&"]="\\26";["'"]="\\27";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2888 ["/"]="\\2f";[":"]="\\3a";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2889 ["<"]="\\3c";[">"]="\\3e";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2890 ["@"]="\\40";["\\"]="\\5c";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2891 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2892 local s={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2893 for e,t in pairs(h)do s[t]=e;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2894 local e=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2895 local function t(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2896 if not e then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2897 local i,t=a(e,"^([^@/]+)@()");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2898 local t,o=a(e,"^([^@/]+)()",t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2899 if i and not t then return nil,nil,nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2900 local a=a(e,"^/(.+)$",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2901 if(not t)or((not a)and#e>=o)then return nil,nil,nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2902 return i,t,a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2903 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2904 local function m(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2905 local t,e=t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2906 if t and e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2907 return t.."@"..e;
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 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2910 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2911 local function n(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2912 local t,e,a=t(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2913 if e and e~="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2914 if i(e,-1,-1)=="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2915 e=i(e,1,-2);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2916 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2917 e=r(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2918 if not e then return;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2919 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2920 t=l(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2921 if not t then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2922 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2923 if a then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2924 a=d(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2925 if not a then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2926 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2927 return t,e,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2928 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2929 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2930 local function i(a,e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2931 if not e then return end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2932 if a and t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2933 return a.."@"..e.."/"..t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2934 elseif a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2935 return a.."@"..e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2936 elseif t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2937 return e.."/"..t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2938 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2939 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2940 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2941 local function c(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2942 local a,t,e=n(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2943 return i(a,t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2944 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2945 local function u(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2946 local o,n,i=t(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2947 local e,t,a=t(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2948 if((e~=nil and e==o)or e==nil)and
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2949 ((t~=nil and t==n)or t==nil)and
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2950 ((a~=nil and a==i)or a==nil)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2951 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2952 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2953 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2954 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2955 local function l(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2956 return(o(1,t(e)));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2957 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2958 local function d(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2959 return(o(2,t(e)));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2960 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2961 local function r(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2962 return(o(3,t(e)));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2963 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2964 local function a(e)return e and(e:gsub(".",h));end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2965 local function o(e)return e and(e:gsub("\\%x%x",s));end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2966 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2967 split=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2968 bare=m;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2969 prepped_split=n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2970 join=i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2971 prep=c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2972 compare=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2973 node=l;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2974 host=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2975 resource=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2976 escape=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2977 unescape=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2978 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2979 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2980 package.preload['util.events']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2981 local a=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2982 local s=table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2983 local l=table.remove;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2984 local r=table.sort;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2985 local d=setmetatable;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2986 local h=next;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2987 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2988 local function u()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2989 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2990 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2991 local n={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2992 local i={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2993 local function u(n,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2994 local e=i[o];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2995 if not e or h(e)==nil then return;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2996 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2997 for e in a(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2998 s(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
2999 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3000 r(t,function(a,t)return e[a]>e[t];end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3001 n[o]=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3002 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3003 end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3004 d(o,{__index=u});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3005 local function s(t,n,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3006 local e=i[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3007 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3008 e[n]=a or 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3009 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3010 e={[n]=a or 0};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3011 i[t]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3012 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3013 o[t]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3014 end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3015 local function r(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3016 local t=i[e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3017 if t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3018 t[a]=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3019 o[e]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3020 if h(t)==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3021 i[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3022 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3023 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3024 end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3025 local function m(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3026 return o[e];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3027 end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3028 local function f(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3029 for e,t in a(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3030 s(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3031 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3032 end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3033 local function c(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3034 for t,e in a(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3035 r(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3036 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3037 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3038 local function h(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3039 local e=o[e];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3040 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3041 for a=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3042 local e=e[a](t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3043 if e~=nil then return e;end
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3046 end;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3047 local function u(i,s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3048 local a=n[i]or t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3049 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3050 local e=#a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3051 local function n(i,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3052 e=e-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3053 if e==0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3054 if t==nil or a==t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3055 return h(i,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3056 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3057 a,e=t,#t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3058 return a[e](n,i,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3059 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3060 return a[e](n,i,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3061 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3062 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3063 return a[e](n,i,s);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3064 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3065 return h(i,s);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3066 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3067 local function d(a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3068 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3069 if a==false then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3070 e=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3071 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3072 e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3073 t=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3074 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3075 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3076 e=n[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3077 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3078 e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3079 n[a]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3080 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3081 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3082 e[#e+1]=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3083 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3084 local function h(a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3085 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3086 if a==false then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3087 e=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3088 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3089 e=n[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3090 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3091 if not e then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3092 for t=#e,1 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3093 if e[t]==o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3094 l(e,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3095 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3096 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3097 if#e==0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3098 if a==false then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3099 t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3100 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3101 n[a]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3102 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3103 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3104 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3105 return{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3106 add_handler=s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3107 remove_handler=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3108 add_handlers=f;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3109 remove_handlers=c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3110 get_handlers=m;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3111 wrappers={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3112 add_handler=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3113 remove_handler=h;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3114 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3115 add_wrapper=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3116 remove_wrapper=h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3117 fire_event=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3118 _handlers=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3119 _event_map=i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3120 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3121 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3122 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3123 new=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3124 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3125 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3126 package.preload['util.dataforms']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3127 local e=setmetatable;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3128 local t,i=pairs,ipairs;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3129 local d,r,u=tostring,type,next;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3130 local h=table.concat;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3131 local m=require"util.stanza";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3132 local l=require"util.jid".prep;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3133 local n={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3134 local c='jabber:x:data';
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3135 local s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3136 local a={__index=s};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3137 function n.new(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3138 return e(t,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3139 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3140 function n.from_stanza(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3141 local o={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3142 title=e:get_child_text("title");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3143 instructions=e:get_child_text("instructions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3144 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3145 for e in e:childtags("field")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3146 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3147 name=e.attr.var;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3148 label=e.attr.label;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3149 type=e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3150 required=e:get_child("required")and true or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3151 value=e:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3152 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3153 o[#o+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3154 if a.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3155 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3156 if a.type:match"list%-"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3157 for e in e:childtags("option")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3158 t[#t+1]={label=e.attr.label,value=e:get_child_text("value")};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3159 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3160 for e in e:childtags("value")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3161 t[#t+1]={label=e.attr.label,value=e:get_text(),default=true};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3162 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3163 elseif a.type:match"%-multi"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3164 for e in e:childtags("value")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3165 t[#t+1]=e.attr.label and{label=e.attr.label,value=e:get_text()}or e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3166 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3167 if a.type=="text-multi"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3168 a.value=h(t,"\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3169 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3170 a.value=t;
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 end
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3175 return new(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3176 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3177 function s.form(t,n,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3178 local e=m.stanza("x",{xmlns=c,type=e or"form"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3179 if t.title then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3180 e:tag("title"):text(t.title):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3181 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3182 if t.instructions then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3183 e:tag("instructions"):text(t.instructions):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3184 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3185 for t,o in i(t)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3186 local a=o.type or"text-single";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3187 e:tag("field",{type=a,var=o.name,label=o.label});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3188 local t=(n and n[o.name])or o.value;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3189 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3190 if a=="hidden"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3191 if r(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3192 e:tag("value")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3193 :add_child(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3194 :up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3195 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3196 e:tag("value"):text(d(t)):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3197 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3198 elseif a=="boolean"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3199 e:tag("value"):text((t and"1")or"0"):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3200 elseif a=="fixed"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3201 elseif a=="jid-multi"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3202 for a,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3203 e:tag("value"):text(t):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3204 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3205 elseif a=="jid-single"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3206 e:tag("value"):text(t):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3207 elseif a=="text-single"or a=="text-private"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3208 e:tag("value"):text(t):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3209 elseif a=="text-multi"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3210 for t in t:gmatch("([^\r\n]+)\r?\n*")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3211 e:tag("value"):text(t):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3212 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3213 elseif a=="list-single"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3214 local a=false;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3215 for o,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3216 if r(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3217 e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3218 if t.default and(not a)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3219 e:tag("value"):text(t.value):up();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3220 a=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3221 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3222 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3223 e:tag("option",{label=t}):tag("value"):text(d(t)):up():up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3224 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3225 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3226 elseif a=="list-multi"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3227 for a,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3228 if r(t)=="table"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3229 e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3230 if t.default then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3231 e:tag("value"):text(t.value):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3232 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3233 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3234 e:tag("option",{label=t}):tag("value"):text(d(t)):up():up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3235 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3236 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3237 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3238 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3239 if o.required then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3240 e:tag("required"):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3241 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3242 e:up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3244 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3245 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3246 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3247 function s.data(t,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3248 local o={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3249 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3250 for i,t in i(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3251 local i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3252 for e in n:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3253 if t.name==e.attr.var then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3254 i=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3255 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3256 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3257 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3258 if not i then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3259 if t.required then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3260 a[t.name]="Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3261 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3262 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3263 local e=e[t.type];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3264 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3265 o[t.name],a[t.name]=e(i,t.required);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3266 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3267 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3268 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3269 if u(a)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3270 return o,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3271 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3272 return o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3273 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3274 e["text-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3275 function(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3276 local t=t:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3277 if t and#t>0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3278 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3279 elseif a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3280 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3281 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3282 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3283 e["text-private"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3284 e["text-single"];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3285 e["jid-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3286 function(t,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3287 local t=t:get_child_text("value")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3288 local a=l(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3289 if a and#a>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3290 return a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3291 elseif t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3292 return nil,"Invalid JID: "..t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3293 elseif o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3294 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3295 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3296 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3297 e["jid-multi"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3298 function(o,i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3299 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3300 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3301 for e in o:childtags("value")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3302 local e=e:get_text();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3303 local o=l(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3304 a[#a+1]=o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3305 if e and not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3306 t[#t+1]=("Invalid JID: "..e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3307 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3308 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3309 if#a>0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3310 return a,(#t>0 and h(t,"\n")or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3311 elseif i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3312 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3313 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3314 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3315 e["list-multi"]=
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3316 function(o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3317 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3318 for e in o:childtags("value")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3319 t[#t+1]=e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3320 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3321 return t,(a and#t==0 and"Required value missing"or nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3322 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3323 e["text-multi"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3324 function(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3325 local t,a=e["list-multi"](t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3326 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3327 t=h(t,"\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3328 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3329 return t,a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3330 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3331 e["list-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3332 e["text-single"];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3333 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3334 ["1"]=true,["true"]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3335 ["0"]=false,["false"]=false,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3336 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3337 e["boolean"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3338 function(t,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3339 local t=t:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3340 local a=a[t~=nil and t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3341 if a~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3342 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3343 elseif t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3344 return nil,"Invalid boolean representation";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3345 elseif o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3346 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3347 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3349 e["hidden"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3350 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3351 return e:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3352 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3353 return n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3354 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3355 package.preload['util.caps']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3356 local d=require"util.encodings".base64.encode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3357 local l=require"util.hashes".sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3358 local n,s,h=table.insert,table.sort,table.concat;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3359 local r=ipairs;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3360 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3361 local function u(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3362 local a,i,o={},{},{};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3363 for t,e in r(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3364 if e.name=="identity"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3365 n(a,(e.attr.category or"").."\0"..(e.attr.type or"").."\0"..(e.attr["xml:lang"]or"").."\0"..(e.attr.name or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3366 elseif e.name=="feature"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3367 n(i,e.attr.var or"");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3368 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
3369 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3370 local i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3371 for a,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3372 if e.name=="field"and e.attr.var then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3373 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3374 for t,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3375 e=#e.tags==0 and e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3376 if e then n(a,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3377 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3378 s(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3379 if e.attr.var=="FORM_TYPE"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3380 i=a[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3381 elseif#a>0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3382 n(t,e.attr.var.."\0"..h(a,"<"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3383 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3384 n(t,e.attr.var);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3385 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3386 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3387 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3388 s(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3389 t=h(t,"<");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3390 if i then t=i.."\0"..t;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3391 n(o,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3392 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3393 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3394 s(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3395 s(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3396 s(o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3397 if#a>0 then a=h(a,"<"):gsub("%z","/").."<";else a="";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3398 if#i>0 then i=h(i,"<").."<";else i="";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3399 if#o>0 then o=h(o,"<"):gsub("%z","<").."<";else o="";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3400 local e=a..i..o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3401 local t=d(l(e));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3402 return t,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3403 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3404 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3405 calculate_hash=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3406 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3407 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3408 package.preload['util.vcard']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3409 local o=require"util.stanza";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3410 local a,u=table.insert,table.concat;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3411 local h=type;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3412 local e,s,m=next,pairs,ipairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3413 local c,d,l,r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3414 local f="\n";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3415 local i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3416 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3417 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3418 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3419 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3420 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3421 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3422 local function w(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3423 return e:gsub("[,:;\\]","\\%1"):gsub("\n","\\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3424 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3425 local function n(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3426 return e:gsub("\\?[\\nt:;,]",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3427 ["\\\\"]="\\",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3428 ["\\n"]="\n",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3429 ["\\r"]="\r",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3430 ["\\t"]="\t",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3431 ["\\:"]=":",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3432 ["\\;"]=";",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3433 ["\\,"]=",",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3434 [":"]="\29",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3435 [";"]="\30",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3436 [","]="\31",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3437 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3438 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3439 local function y(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3440 local a=o.stanza(t.name,{xmlns="vcard-temp"});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3441 local e=i[t.name];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3442 if e=="text"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3443 a:text(t[1]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3444 elseif h(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3445 if e.types and t.TYPE then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3446 if h(t.TYPE)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3447 for o,e in s(e.types)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3448 for o,t in s(t.TYPE)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3449 if t:upper()==e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3450 a:tag(e):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3451 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3452 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3454 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3455 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3456 a:tag(t.TYPE:upper()):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3457 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3458 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3459 if e.props then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3460 for o,e in s(e.props)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3461 if t[e]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3462 a:tag(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3463 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3464 end
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.value then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3467 a:tag(e.value):text(t[1]):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3468 elseif e.values then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3469 local o=e.values;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3470 local i=o.behaviour=="repeat-last"and o[#o];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3471 for o=1,#t do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3472 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
3473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3474 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3475 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3476 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3477 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3478 local function t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3479 local t=o.stanza("vCard",{xmlns="vcard-temp"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3480 for a=1,#e do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3481 t:add_child(y(e[a]));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3482 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3483 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3484 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3485 function r(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3486 if not e[1]or e[1].name then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3487 return t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3488 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3489 local a=o.stanza("xCard",{xmlns="vcard-temp"});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3490 for o=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3491 a:add_child(t(e[o]));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3492 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3493 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3494 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3495 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3496 function c(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3497 t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3498 :gsub("\r\n","\n")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3499 :gsub("\n ","")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3500 :gsub("\n\n+","\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3501 local h={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3502 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3503 for t in t:gmatch("[^\n]+")do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3504 local t=n(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3505 local s,t,n=t:match("^([-%a]+)(\30?[^\29]*)\29(.*)$");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3506 n=n:gsub("\29",":");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3507 if#t>0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3508 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3509 for e,o,i in t:gmatch("\30([^=]+)(=?)([^\30]*)")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3510 e=e:upper();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3511 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3512 for e in i:gmatch("[^\31]+")do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3513 t[#t+1]=e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3514 t[e]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3515 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3516 if o=="="then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3517 a[e]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3518 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3519 a[e]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3520 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3521 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3522 t=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3523 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3524 if s=="BEGIN"and n=="VCARD"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3525 e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3526 h[#h+1]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3527 elseif s=="END"and n=="VCARD"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3528 e=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3529 elseif e and i[s]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3530 local o=i[s];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3531 local i={name=s};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3532 e[#e+1]=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3533 local s=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3534 e=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3535 if o.types then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3536 for o,a in m(o.types)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3537 local a=a:lower();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3538 if(t.TYPE and t.TYPE[a]==true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3539 or t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3540 e.TYPE=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3541 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3542 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3543 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3544 if o.props then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3545 for o,a in m(o.props)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3546 if t[a]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3547 if t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3548 e[a]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3549 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3550 for o,t in m(t[a])do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3551 e[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3552 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3553 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3554 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3555 end
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 if o=="text"or o.value then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3558 a(e,n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3559 elseif o.values then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3560 local t="\30"..n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3561 for t in t:gmatch("\30([^\30]*)")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3562 a(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3563 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3564 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3565 e=s;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3566 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3567 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3568 return h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3569 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3570 local function n(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3571 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3572 for a=1,#e do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3573 t[a]=w(e[a]);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3574 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3575 t=u(t,";");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3576 local a="";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3577 for e,t in s(e)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3578 if h(e)=="string"and e~="name"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3579 a=a..(";%s=%s"):format(e,h(t)=="table"and u(t,",")or t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3580 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3581 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3582 return("%s%s:%s"):format(e.name,a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3583 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3584 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3585 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3586 a(e,"BEGIN:VCARD")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3587 for o=1,#t do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3588 a(e,n(t[o]));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3589 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3590 a(e,"END:VCARD")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3591 return u(e,f);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3592 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3593 function d(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3594 if e[1]and e[1].name then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3595 return o(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3596 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3597 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3598 for t=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3599 a[t]=o(e[t]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3600 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3601 return u(a,f);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3602 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3603 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3604 local function n(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3605 local t=o.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3606 local e=i[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3607 local t={name=t};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3608 if e=="text"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3609 t[1]=o:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3610 elseif h(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3611 if e.value then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3612 t[1]=o:get_child_text(e.value)or"";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3613 elseif e.values then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3614 local e=e.values;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3615 if e.behaviour=="repeat-last"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3616 for e=1,#o.tags do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3617 a(t,o.tags[e]:get_text()or"");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3618 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3619 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3620 for i=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3621 a(t,o:get_child_text(e[i])or"");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3622 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3623 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3624 elseif e.names then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3625 local e=e.names;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3626 for a=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3627 if o:get_child(e[a])then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3628 t[1]=e[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3629 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3630 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3631 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3632 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3633 if e.props_verbatim then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3634 for e,a in s(e.props_verbatim)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3635 t[e]=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3636 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3637 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3638 if e.types then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3639 local e=e.types;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3640 t.TYPE={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3641 for i=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3642 if o:get_child(e[i])then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3643 a(t.TYPE,e[i]:lower());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3644 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3645 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3646 if#t.TYPE==0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3647 t.TYPE=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3648 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3649 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3650 if e.props then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3651 local e=e.props;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3652 for i=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3653 local e=e[i]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3654 local o=o:get_child_text(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3655 if o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3656 t[e]=t[e]or{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3657 a(t[e],o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3658 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3659 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3660 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3661 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3662 return nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3663 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3664 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3665 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3666 local function t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3667 local e=e.tags;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3668 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3669 for o=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3670 a(t,n(e[o]));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3671 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3672 return t
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3673 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3674 function l(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3675 if e.attr.xmlns~="vcard-temp"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3676 return nil,"wrong-xmlns";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3677 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3678 if e.name=="xCard"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3679 local a={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3680 local e=e.tags;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3681 for o=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3682 a[o]=t(e[o]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3683 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3684 return a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3685 elseif e.name=="vCard"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3686 return t(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3687 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3688 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3689 i={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3690 VERSION="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3691 FN="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3692 N={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3693 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3694 "FAMILY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3695 "GIVEN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3696 "MIDDLE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3697 "PREFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3698 "SUFFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3699 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3700 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3701 NICKNAME="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3702 PHOTO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3703 props_verbatim={ENCODING={"b"}},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3704 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3705 value="BINVAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3706 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3707 BDAY="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3708 ADR={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3709 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3710 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3711 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3712 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3713 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3714 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3715 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3716 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3717 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3718 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3719 "POBOX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3720 "EXTADD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3721 "STREET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3722 "LOCALITY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3723 "REGION",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3724 "PCODE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3725 "CTRY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3726 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3727 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3728 LABEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3729 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3730 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3731 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3732 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3733 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3734 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3735 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3736 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3737 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3738 value="LINE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3739 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3740 TEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3741 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3742 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3743 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3744 "VOICE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3745 "FAX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3746 "PAGER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3747 "MSG",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3748 "CELL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3749 "VIDEO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3750 "BBS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3751 "MODEM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3752 "ISDN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3753 "PCS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3754 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3755 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3756 value="NUMBER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3757 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3758 EMAIL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3759 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3760 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3761 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3762 "INTERNET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3763 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3764 "X400",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3765 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3766 value="USERID",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3767 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3768 JABBERID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3769 MAILER="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3770 TZ="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3771 GEO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3772 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3773 "LAT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3774 "LON",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3775 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3776 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3777 TITLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3778 ROLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3779 LOGO="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3780 AGENT="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3781 ORG={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3782 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3783 behaviour="repeat-last",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3784 "ORGNAME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3785 "ORGUNIT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3786 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3787 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3788 CATEGORIES={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3789 values="KEYWORD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3790 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3791 NOTE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3792 PRODID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3793 REV="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3794 SORTSTRING="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3795 SOUND="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3796 UID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3797 URL="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3798 CLASS={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3799 names={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3800 "PUBLIC",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3801 "PRIVATE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3802 "CONFIDENTIAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3803 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3804 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3805 KEY={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3806 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3807 value="CRED",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3808 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3809 DESC="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3810 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3811 i.LOGO=i.PHOTO;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3812 i.SOUND=i.PHOTO;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3813 return{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3814 from_text=c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3815 to_text=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3816 from_xep54=l;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3817 to_xep54=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3818 lua_to_text=d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3819 lua_to_xep54=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3820 text_to_lua=c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3821 text_to_xep54=function(...)return r(c(...));end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3822 xep54_to_lua=l;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3823 xep54_to_text=function(...)return d(l(...))end;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3824 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3825 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3826 package.preload['util.logger']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3827 local o=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3828 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3829 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3830 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3831 local function i(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3832 local a=e(t,"debug");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3833 local n=e(t,"info");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3834 local i=e(t,"warn");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3835 local o=e(t,"error");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3836 return function(t,e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3837 if t=="debug"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3838 return a(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3839 elseif t=="info"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3840 return n(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3841 elseif t=="warn"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3842 return i(e,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3843 elseif t=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3844 return o(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3845 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3846 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3847 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3848 function e(o,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3849 local e=t[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3850 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3851 e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3852 t[a]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3853 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3854 local e=function(i,...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3855 for t=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3856 e[t](o,a,i,...);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3857 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3858 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3859 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3860 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3861 local function n()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3862 for t,e in o(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3863 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3864 e[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3865 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3866 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3867 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3868 local function o(e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3869 if not t[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3870 t[e]={a};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3871 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3872 t[e][#t[e]+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3873 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3874 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3875 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3876 init=i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3877 make_logger=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3878 reset=n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3879 add_level_sink=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3880 new=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3881 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3882 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3883 package.preload['util.datetime']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3884 local e=os.date;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3885 local i=os.time;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3886 local w=os.difftime;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3887 local l=tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3888 local t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3889 local function c(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3890 return e("!%Y-%m-%d",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3891 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3892 local function u(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3893 return e("!%Y-%m-%dT%H:%M:%SZ",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3894 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3895 local function m(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3896 return e("!%H:%M:%S",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3897 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3898 local function f(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3899 return e("!%Y%m%dT%H:%M:%S",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3900 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3901 local function y(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3902 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3903 local n,d,h,s,r,o,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3904 n,d,h,s,r,o,a=t:match("^(%d%d%d%d)%-?(%d%d)%-?(%d%d)T(%d%d):(%d%d):(%d%d)%.?%d*([Z+%-]?.*)$");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3905 if n then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3906 local u=w(i(e("*t")),i(e("!*t")));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3907 local t=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3908 if a~=""and a~="Z"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3909 local o,a,e=a:match("([+%-])(%d%d):?(%d*)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3910 if not o then return;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3911 if#e~=2 then e="0";end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3912 a,e=l(a),l(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3913 t=a*60*60+e*60;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3914 if o=="-"then t=-t;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3915 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3916 o=(o+u)-t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3917 return i({year=n,month=d,day=h,hour=s,min=r,sec=o,isdst=false});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3918 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3919 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3920 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3921 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3922 date=c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3923 datetime=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3924 time=m;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3925 legacy=f;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3926 parse=y;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3927 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3928 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3929 package.preload['util.json']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3930 local v=type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3931 local t,p,y,j=table.insert,table.concat,table.remove,table.sort;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3932 local n=string.char;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3933 local q,l=tostring,tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3934 local c,s=pairs,ipairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3935 local i=next;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3936 local b,w=getmetatable,setmetatable;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3937 local m=print;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3938 local a,e=pcall(require,"util.array");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3939 local f=a and b(e())or{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3940 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3941 local r=w({},{__tostring=function()return"null";end;});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3942 a.null=r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3943 local d={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3944 ["\""]="\\\"",["\\"]="\\\\",["\b"]="\\b",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3945 ["\f"]="\\f",["\n"]="\\n",["\r"]="\\r",["\t"]="\\t"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3946 local e={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3947 ["\""]="\"",["\\"]="\\",["/"]="/",
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3948 b="\b",f="\f",n="\n",r="\r",t="\t"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3949 for t=0,31 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3950 local e=n(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3951 if not d[e]then d[e]=("\\u%.4X"):format(t);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3952 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3953 local function x(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3954 if e<128 then return n(e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3955 local t=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3956 if e<2048 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3957 local e=(e-t)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3958 return n(128+64+e,128+t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3959 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3960 local a=e%4096;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3961 local o=(a-t)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3962 local e=(e-a)/4096;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3963 return n(128+64+32+e,128+o,128+t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3964 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3965 local g={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3966 number=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3967 string=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3968 table=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3969 boolean=true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3970 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3971 local z={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3972 __array=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3973 __hash=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3974 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3975 local o,k,h,u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3976 function u(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3977 t(e,"\""..(a:gsub(".",d)).."\"");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3978 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3979 function h(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3980 t(e,"[");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3981 if i(a)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3982 for i,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3983 o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3984 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3985 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3986 y(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3987 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3988 t(e,"]");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3989 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3990 function k(l,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3991 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3992 local d={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3993 local n={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3994 for e,t in s(l)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3995 a[e]=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3996 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3997 for e,t in c(l)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3998 local o,i=v(e),v(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
3999 if g[i]or t==r then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4000 if o=="string"and not z[e]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4001 n[e]=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4002 elseif(g[o]or e==r)and a[e]==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4003 d[e]=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4004 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4005 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4006 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4007 if i(d)~=nil or i(n)~=nil or i(a)==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4008 t(e,"{");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4009 local r=#e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4010 if e.ordered then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4011 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4012 for e in c(n)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4013 t(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4014 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4015 j(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4016 for i,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4017 u(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4018 t(e,":");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4019 o(n[a],e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4020 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4021 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4022 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4023 for a,i in c(n)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4024 u(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4025 t(e,":");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4026 o(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4027 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4028 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4029 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4030 if i(d)~=nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4031 t(e,"\"__hash\":[");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4032 for i,a in c(d)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4033 o(i,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4034 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4035 o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4036 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4037 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4038 y(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4039 t(e,"]");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4040 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4041 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4042 if i(a)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4043 t(e,"\"__array\":");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4044 h(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4045 t(e,",");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4046 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4047 if r~=#e then y(e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4048 t(e,"}");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4049 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4050 h(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4051 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4052 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4053 function o(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4054 local o=v(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4055 if e==r then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4056 t(a,"null");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4057 elseif o=="number"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4058 t(a,q(e));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4059 elseif o=="string"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4060 u(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4061 elseif o=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4062 local t=b(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4063 if t==f then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4064 h(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4065 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4066 k(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4067 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4068 elseif o=="boolean"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4069 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
4070 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4071 t(a,"null");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4072 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4073 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4074 function a.encode(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4075 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4076 o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4077 return p(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4078 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4079 function a.encode_ordered(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4080 local e={ordered=true};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4081 o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4082 return p(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4083 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4084 function a.encode_array(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4085 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4086 h(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4087 return p(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4088 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4089 local function o(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4090 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
4091 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4092 local function d(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4093 local a=e.__array;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4094 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4095 e.__array=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4096 for o,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4097 t(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4098 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4099 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4100 local a=e.__hash;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4101 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4102 e.__hash=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4103 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4104 for o,a in s(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4105 if t~=nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4106 e[t]=a;t=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4107 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4108 t=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4109 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4110 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4111 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4112 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4113 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4114 local i,h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4115 local function u(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4116 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4117 while true do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4118 local n,s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4119 e=o(t,e+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4120 if t:byte(e)~=34 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4121 if t:byte(e)==125 then return a,e+1;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4122 return nil,"key expected";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4123 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4124 n,e=h(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4125 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
4126 e=o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4127 if t:byte(e)~=58 then return nil,"colon expected";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4128 s,e=i(t,e+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4129 if s==nil then return nil,e;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4130 a[n]=s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4131 e=o(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4132 local t=t:byte(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4133 if t==125 then return d(a),e+1;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4134 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
4135 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4136 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4137 local function c(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4138 local s={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4139 local h=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4140 while true do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4141 local n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4142 n,e=i(a,e+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4143 if n==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4144 if a:byte(h+1)==93 then return w(s,f),h+2;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4145 return n,e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4146 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4147 t(s,n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4148 e=o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4149 local t=a:byte(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4150 if t==93 then return w(s,f),e+1;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4151 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
4152 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4153 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4154 local s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4155 local function e(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4156 local t,e=l(e:sub(3,6),16),l(e:sub(9,12),16);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4157 local e=t*1024+e-56613888;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4158 local o=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4159 e=(e-o)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4160 local a=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4161 e=(e-a)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4162 local t=e%64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4163 e=(e-t)/64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4164 return n(240+e,128+t,128+a,128+o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4165 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4166 local function n(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4167 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
4168 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4169 return x(l(e,16));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4170 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4171 s=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4172 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4173 function h(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4174 e=e+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4175 local t=a:find("\"",e,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4176 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4177 local e=a:sub(e,t-1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4178 s=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4179 e=e:gsub("\\u.?.?.?.?",n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4180 if s then return nil,"invalid escape";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4181 return e,t+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4182 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4183 return nil,"string eof";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4184 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4185 local function d(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4186 local e=e:match("[0-9%.%-eE%+]+",t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4187 return l(e),t+#e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4188 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4189 local function l(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4190 local t,o,a=t:byte(e+1,e+3);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4191 if t==117 and o==108 and a==108 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4192 return r,e+4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4193 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4194 return nil,"null parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4195 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4196 local function s(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4197 local o,a,t=t:byte(e+1,e+3);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4198 if o==114 and a==117 and t==101 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4199 return true,e+4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4200 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4201 return nil,"true parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4202 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4203 local function n(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4204 local t,o,a,i=t:byte(e+1,e+4);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4205 if t==97 and o==108 and a==115 and i==101 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4206 return false,e+5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4207 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4208 return nil,"false parse failed";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4209 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4210 function i(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4211 e=o(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4212 local t=a:byte(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4213 if t==123 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4214 return u(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4215 elseif t==91 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4216 return c(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4217 elseif t==34 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4218 return h(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4219 elseif t~=nil and t>=48 and t<=57 or t==45 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4220 return d(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4221 elseif t==110 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4222 return l(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4223 elseif t==116 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4224 return s(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4225 elseif t==102 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4226 return n(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4227 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4228 return nil,"value expected";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4229 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4230 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4231 local t={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4232 ["\\\""]="\\u0022";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4233 ["\\\\"]="\\u005c";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4234 ["\\/"]="\\u002f";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4235 ["\\b"]="\\u0008";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4236 ["\\f"]="\\u000C";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4237 ["\\n"]="\\u000A";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4238 ["\\r"]="\\u000D";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4239 ["\\t"]="\\u0009";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4240 ["\\u"]="\\u";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4241 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4242 function a.decode(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4243 e=e:gsub("\\.",t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4244 local t,a=i(e,1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4245 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
4246 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
4247 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4248 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4249 function a.test(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4250 local e=a.encode(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4251 local t=a.decode(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4252 local t=a.encode(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4253 if e~=t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4254 m("FAILED");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4255 m("encoded:",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4256 m("recoded:",t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4257 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4258 m(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4259 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4260 return e==t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4261 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4262 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4263 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4264 package.preload['util.xml']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4265 local t=require"util.stanza";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4266 local h=require"lxp";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4267 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4268 local e=(function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4269 local n={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4270 ["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
4271 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4272 local e="\1";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4273 local i="^([^"..e.."]*)"..e.."?(.*)$";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4274 return function(s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4275 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4276 local a=t.stanza("root");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4277 function o:StartElement(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4278 local t,o=t:match(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4279 if o==""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4280 t,o="",t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4281 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4282 if t~=""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4283 e.xmlns=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4284 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4285 for t=1,#e do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4286 local a=e[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4287 e[t]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4288 local t,o=a:match(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4289 if o~=""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4290 t=n[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4291 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4292 e[t..":"..o]=e[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4293 e[a]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4294 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4295 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4296 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4297 a:tag(o,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4298 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4299 function o:CharacterData(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4300 a:text(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4301 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4302 function o:EndElement()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4303 a:up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4304 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4305 local t=h.new(o,"\1");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4306 local e,n,i,o=t:parse(s);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4307 if e then e,n,i,o=t:parse();end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4308 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4309 return a.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4310 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4311 return e,n.." (line "..i..", col "..o..")";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4312 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4313 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4314 end)();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4315 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4316 parse=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4317 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4318 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4319 package.preload['util.rsm']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4320 local s=require"util.stanza".stanza;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4321 local a,i=tostring,tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4322 local h=type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4323 local r=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4324 local n='http://jabber.org/protocol/rsm';
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4325 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4326 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4327 local e=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4328 local function t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4329 return i((e:get_text()));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4330 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4331 local function a(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4332 return t:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4333 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4334 e.after=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4335 e.before=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4336 local e=e:get_text();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4337 return e==""or e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4338 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4339 e.max=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4340 e.index=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4341 e.first=function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4342 return{index=i(e.attr.index);e:get_text()};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4343 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4344 e.last=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4345 e.count=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4346 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4347 local h=setmetatable({
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4348 first=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4349 if h(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4350 t:tag("first",{index=e.index}):text(e[1]):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4351 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4352 t:tag("first"):text(a(e)):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4353 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4354 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4355 before=function(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4356 if t==true then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4357 e:tag("before"):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4358 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4359 e:tag("before"):text(a(t)):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4360 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4361 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4362 },{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4363 __index=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4364 return function(o,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4365 o:tag(e):text(a(t)):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4366 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4367 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4368 });
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4369 local function a(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4370 local i={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4371 for a in e:childtags()do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4372 local e=a.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4373 local t=e and o[e];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4374 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4375 i[e]=t(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4376 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4377 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4378 return i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4379 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4380 local function i(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4381 local e=s("set",{xmlns=n});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4382 for t,a in r(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4383 if o[t]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4384 h[t](e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4385 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4386 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4387 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4388 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4389 local function t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4390 local e=e:get_child("set",n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4391 if e and#e.tags>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4392 return a(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4393 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4394 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4395 return{parse=a,generate=i,get=t};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4396 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4397 package.preload['util.random']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4398 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
4399 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4400 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4401 seed=function()end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4402 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
4403 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4404 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4405 local e=require"crypto"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4406 return e.rand;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4407 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4408 package.preload['util.ip']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4409 local o={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4410 local i={__index=function(t,e)return(o[e])(t);end,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4411 __tostring=function(e)return e.addr;end,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4412 __eq=function(e,t)return e.addr==t.addr;end};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4413 local n={["0"]="0000",["1"]="0001",["2"]="0010",["3"]="0011",["4"]="0100",["5"]="0101",["6"]="0110",["7"]="0111",["8"]="1000",["9"]="1001",["A"]="1010",["B"]="1011",["C"]="1100",["D"]="1101",["E"]="1110",["F"]="1111"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4414 local function e(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4415 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4416 local a=e:match("^%x+(.)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4417 if a==":"or(not(a)and e:sub(1,1)==":")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4418 t="IPv6"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4419 elseif a=="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4420 t="IPv4"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4421 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4422 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4423 return nil,"invalid address";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4424 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4425 elseif t~="IPv4"and t~="IPv6"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4426 return nil,"invalid protocol";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4427 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4428 local a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4429 if t=="IPv6"and e:find('%',1,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4430 e,a=e:match("^(.-)%%(.*)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4431 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4432 if t=="IPv6"and e:find('.',1,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4433 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4434 e,t=e:gsub(":(%d+)%.(%d+)%.(%d+)%.(%d+)$",function(e,a,t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4435 return(":%04X:%04X"):format(e*256+a,t*256+o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4436 end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4437 if t~=1 then return nil,"invalid-address";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4438 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4439 return setmetatable({addr=e,proto=t,zone=a},i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4440 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4441 local function i(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4442 local e="";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4443 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4444 if t.proto=="IPv4"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4445 t=t.toV4mapped;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4446 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4447 t=(t.addr):upper();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4448 t:gsub("([^:]*):?",function(e)a[#a+1]=e end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4449 if not t:match(":$")then a[#a]=nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4450 for o,t in ipairs(a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4451 if t:len()==0 and o~=1 and o~=#a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4452 for t=1,16*(9-#a)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4453 e=e.."0";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4454 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4455 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4456 for t=1,4-t:len()do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4457 e=e.."0000";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4458 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4459 for a=1,t:len()do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4460 e=e..n[t:sub(a,a)];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4461 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4462 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4463 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4464 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4465 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4466 local function t(a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4467 a,t=i(a),i(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4468 for e=1,128 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4469 if a:sub(e,e)~=t:sub(e,e)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4470 return e-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4471 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4472 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4473 return 128;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4474 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4475 local function s(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4476 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4477 t:gsub("([^.]*).?",function(t)e[#e+1]=tonumber(t)end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4478 if e[1]==127 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4479 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4480 elseif e[1]==169 and e[2]==254 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4481 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4482 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4483 return 14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4484 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4485 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4486 local function r(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4487 if e:match("^[0:]*1$")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4488 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4489 elseif e:match("^[Ff][Ee][89ABab]")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4490 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4491 elseif e:match("^[Ff][Ee][CcDdEeFf]")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4492 return 5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4493 elseif e:match("^[Ff][Ff]")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4494 return tonumber("0x"..e:sub(4,4));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4495 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4496 return 14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4497 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4498 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4499 local function n(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4500 if t(a,e("::1","IPv6"))==128 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4501 return 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4502 elseif t(a,e("2002::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4503 return 2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4504 elseif t(a,e("2001::","IPv6"))>=32 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4505 return 5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4506 elseif t(a,e("fc00::","IPv6"))>=7 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4507 return 13;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4508 elseif t(a,e("fec0::","IPv6"))>=10 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4509 return 11;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4510 elseif t(a,e("3ffe::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4511 return 12;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4512 elseif t(a,e("::","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4513 return 3;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4514 elseif t(a,e("::ffff:0:0","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4515 return 4;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4516 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4517 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4518 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4519 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4520 local function i(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4521 if t(a,e("::1","IPv6"))==128 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4522 return 50;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4523 elseif t(a,e("2002::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4524 return 30;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4525 elseif t(a,e("2001::","IPv6"))>=32 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4526 return 5;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4527 elseif t(a,e("fc00::","IPv6"))>=7 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4528 return 3;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4529 elseif t(a,e("fec0::","IPv6"))>=10 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4530 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4531 elseif t(a,e("3ffe::","IPv6"))>=16 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4532 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4533 elseif t(a,e("::","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4534 return 1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4535 elseif t(a,e("::ffff:0:0","IPv6"))>=96 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4536 return 35;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4537 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4538 return 40;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4539 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4540 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4541 local function h(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4542 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4543 local t="::ffff:";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4544 o:gsub("([^.]*).?",function(e)a[#a+1]=tonumber(e)end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4545 t=t..("%02x"):format(a[1]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4546 t=t..("%02x"):format(a[2]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4547 t=t..":"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4548 t=t..("%02x"):format(a[3]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4549 t=t..("%02x"):format(a[4]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4550 return e(t,"IPv6");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4551 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4552 function o:toV4mapped()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4553 if self.proto~="IPv4"then return nil,"No IPv4 address"end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4554 local e=h(self.addr);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4555 self.toV4mapped=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4556 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4557 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4558 function o:label()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4559 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4560 if self.proto=="IPv4"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4561 e=n(self.toV4mapped);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4562 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4563 e=n(self);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4564 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4565 self.label=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4566 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4567 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4568 function o:precedence()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4569 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4570 if self.proto=="IPv4"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4571 e=i(self.toV4mapped);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4572 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4573 e=i(self);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4574 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4575 self.precedence=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4576 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4577 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4578 function o:scope()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4579 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4580 if self.proto=="IPv4"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4581 e=s(self.addr);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4582 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4583 e=r(self.addr);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4584 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4585 self.scope=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4586 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4587 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4588 function o:private()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4589 local t=self.scope~=14;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4590 if not t and self.proto=="IPv4"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4591 local a=self.addr;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4592 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4593 a:gsub("([^.]*).?",function(t)e[#e+1]=tonumber(t)end);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4594 if e[1]==127 or e[1]==10 or(e[1]==192 and e[2]==168)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4595 or(e[1]==172 and(e[2]>=16 or e[2]<=32))then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4596 t=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4597 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4598 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4599 self.private=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4600 return t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4601 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4602 local function i(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4603 local o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4604 local a=t:find("/",1,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4605 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4606 o=tonumber(t:sub(a+1,-1));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4607 t=t:sub(1,a-1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4608 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4609 return e(t),o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4610 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4611 local function n(e,a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4612 local e=t(e,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4613 if o and a.proto=="IPv4"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4614 e=e-96;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4615 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4616 return e>=(o or 128);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4617 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4618 return{new_ip=e,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4619 commonPrefixLength=t,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4620 parse_cidr=i,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4621 match=n};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4622 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4623 package.preload['util.time']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4624 local e=require"socket".gettime;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4625 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4626 now=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4627 }
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4628 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4629 package.preload['util.sasl.scram']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4630 local i,l=require"mime".b64,require"mime".unb64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4631 local e=require"util.hashes";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4632 local a=require"bit";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4633 local r=require"util.random";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4634 local p=tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4635 local d,t=string.char,string.byte;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4636 local s=string.gsub;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4637 local h=a.bxor;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4638 local function n(e,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4639 return(s(e,"()(.)",function(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4640 return d(h(t(a),t(o,e)))
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4641 end));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4642 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4643 local y,e=e.sha1,e.hmac_sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4644 local function f(o,t,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4645 local t=e(o,t.."\0\0\0\1");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4646 local a=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4647 for i=2,i do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4648 t=e(o,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4649 a=n(a,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4650 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4651 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4652 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4653 local function w(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4654 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4655 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4656 local function t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4657 return(s(e,"[,=]",{[","]="=2C",["="]="=3D"}));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4658 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4659 local function u(o,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4660 local t="n="..t(o.username);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4661 local d=i(r.bytes(15));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4662 local r="r="..d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4663 local h=t..","..r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4664 local s="";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4665 local t=o.conn:ssl()and"y"or"n";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4666 if a=="SCRAM-SHA-1-PLUS"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4667 s=o.conn:socket():getfinished();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4668 t="p=tls-unique";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4669 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4670 local u=t..",,";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4671 local t=u..h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4672 local t,m=coroutine.yield(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4673 if t~="challenge"then return false end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4674 local a,t,c=m:match("(r=[^,]+),s=([^,]*),i=(%d+)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4675 local c=p(c);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4676 t=l(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4677 if not a or not t or not c then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4678 return false,"Could not parse server_first_message";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4679 elseif a:find(d,3,true)~=3 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4680 return false,"nonce sent by server does not match our nonce";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4681 elseif a==r then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4682 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
4683 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4684 local s=u..s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4685 local s="c="..i(s);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4686 local s=s..","..a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4687 local o=f(w(o.password),t,c);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4688 local t=e(o,"Client Key");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4689 local r=y(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4690 local a=h..","..m..","..s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4691 local h=e(r,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4692 local n=n(t,h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4693 local t=e(o,"Server Key");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4694 local t=e(t,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4695 local e="p="..i(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4696 local e=s..","..e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4697 local e,a=coroutine.yield(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4698 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
4699 local e=a:match("v=([^,]+)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4700 if l(e)~=t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4701 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
4702 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4703 return true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4704 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4705 return function(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4706 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
4707 if t=="SCRAM-SHA-1"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4708 return u,99;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4709 elseif t=="SCRAM-SHA-1-PLUS"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4710 local e=e.conn:ssl()and e.conn:socket();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4711 if e and e.getfinished then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4712 return u,100;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4713 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4714 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4715 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4716 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4717 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4718 package.preload['util.sasl.plain']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4719 return function(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4720 if t=="PLAIN"and e.username and e.password then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4721 return function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4722 return"success"==coroutine.yield("\0"..e.username.."\0"..e.password);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4723 end,5;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4724 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4725 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4726 end)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4727 package.preload['util.sasl.anonymous']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4728 return function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4729 if e=="ANONYMOUS"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4730 return function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4731 return coroutine.yield()=="success";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4732 end,0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4733 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4734 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4735 end)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4736 package.preload['verse.plugins.tls']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4737 local a=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4738 local t="urn:ietf:params:xml:ns:xmpp-tls";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4739 function a.plugins.tls(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4740 local function i(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4741 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4742 if o:get_child("starttls",t)and e.conn.starttls then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4743 e:debug("Negotiating TLS...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4744 e:send(a.stanza("starttls",{xmlns=t}));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4745 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4746 elseif not e.conn.starttls and not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4747 e:warn("SSL libary (LuaSec) not loaded, so TLS not available");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4748 elseif not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4749 e:debug("Server doesn't offer TLS :(");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4750 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4751 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4752 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4753 if t.name=="proceed"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4754 e:debug("Server says proceed, handshake starting...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4755 e.conn:starttls(e.ssl or{mode="client",protocol="sslv23",options="no_sslv2",capath="/etc/ssl/certs"},true);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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 local function a(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4759 if t=="ssl-handshake-complete"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4760 e.secure=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4761 e:debug("Re-opening stream...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4762 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4763 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4764 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4765 e:hook("stream-features",i,400);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4766 e:hook("stream/"..t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4767 e:hook("status",a,400);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4768 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4769 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4770 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4771 package.preload['verse.plugins.sasl']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4772 local n=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4773 local s,h=require"mime".b64,require"mime".unb64;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4774 local a="urn:ietf:params:xml:ns:xmpp-sasl";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4775 function n.plugins.sasl(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4776 local function r(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4777 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4778 e:debug("Authenticating with SASL...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4779 local t=t:get_child("mechanisms",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4780 if not t then return end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4781 local o={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4782 local i={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4783 for t in t:childtags("mechanism")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4784 t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4785 e:debug("Server offers %s",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4786 if not o[t]then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4787 local n=t:match("[^-]+");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4788 local s,a=pcall(require,"util.sasl."..n:lower());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4789 if s then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4790 e:debug("Loaded SASL %s module",n);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4791 o[t],i[t]=a(e,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4792 elseif not tostring(a):match("not found")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4793 e:debug("Loading failed: %s",tostring(a));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4794 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4795 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4796 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4797 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4798 for e in pairs(o)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4799 table.insert(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4800 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4801 if not t[1]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4802 e:event("authentication-failure",{condition="no-supported-sasl-mechanisms"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4803 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4804 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4805 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4806 table.sort(t,function(t,e)return i[t]>i[e];end);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4807 local t,i=t[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4808 e:debug("Selecting %s mechanism...",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4809 e.sasl_mechanism=coroutine.wrap(o[t]);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4810 i=e:sasl_mechanism(t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4811 local t=n.stanza("auth",{xmlns=a,mechanism=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4812 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4813 t:text(s(i));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4814 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4815 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4816 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4817 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4818 local function o(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4819 if t.name=="failure"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4820 local a=t.tags[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4821 local t=t:get_child_text("text");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4822 e:event("authentication-failure",{condition=a.name,text=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4823 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4824 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4825 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4826 local t,o=e.sasl_mechanism(t.name,h(t:get_text()));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4827 if not t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4828 e:event("authentication-failure",{condition=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4829 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4830 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4831 elseif t==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4832 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4833 e.authenticated=true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4834 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4835 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4836 e:send(n.stanza("response",{xmlns=a}):text(s(t)));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4837 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4838 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4839 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4840 e:hook("stream-features",r,300);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4841 e:hook("stream/"..a,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4842 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4843 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4844 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4845 package.preload['verse.plugins.bind']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4846 local t=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4847 local o=require"util.jid";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4848 local a="urn:ietf:params:xml:ns:xmpp-bind";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4849 function t.plugins.bind(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4850 local function i(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4851 if e.bound then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4852 e:debug("Binding resource...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4853 e:send_iq(t.iq({type="set"}):tag("bind",{xmlns=a}):tag("resource"):text(e.resource),
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4854 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4855 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4856 local t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4857 :get_child("bind",a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4858 :get_child_text("jid");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4859 e.username,e.host,e.resource=o.split(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4860 e.jid,e.bound=t,true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4861 e:event("bind-success",{jid=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4862 elseif t.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4863 local a=t:child_with_name("error");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4864 local o,a,t=t:get_error();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4865 e:event("bind-failure",{error=a,text=t,type=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4866 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4867 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4868 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4869 e:hook("stream-features",i,200);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4870 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4871 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4872 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4873 package.preload['verse.plugins.session']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4874 local t=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4875 local a="urn:ietf:params:xml:ns:xmpp-session";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4876 function t.plugins.session(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4877 local function i(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4878 local o=o:get_child("session",a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4879 if o and not o:get_child("optional")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4880 local function o(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4881 e:debug("Establishing Session...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4882 e:send_iq(t.iq({type="set"}):tag("session",{xmlns=a}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4883 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4884 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4885 e:event("session-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4886 elseif t.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4887 local t,o,a=t:get_error();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4888 e:event("session-failure",{error=o,text=a,type=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4889 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4890 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4891 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4892 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4893 e:hook("bind-success",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4894 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4895 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4896 e:hook("stream-features",i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4897 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4898 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4899 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4900 package.preload['verse.plugins.legacy']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4901 local i=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4902 local s=require"util.uuid".generate;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4903 local o="jabber:iq:auth";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4904 function i.plugins.legacy(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4905 local function n(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4906 local a=t:get_child("query",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4907 if t.attr.type~="result"or not a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4908 local o,a,t=t:get_error();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4909 e:debug("warn","%s %s: %s",o,a,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4910 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4911 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4912 username=e.username;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4913 password=e.password;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4914 resource=e.resource or s();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4915 digest=false,sequence=false,token=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4916 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4917 local o=i.iq({to=e.host,type="set"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4918 :tag("query",{xmlns=o});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4919 if#a>0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4920 for a in a:childtags()do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4921 local a=a.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4922 local i=t[a];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4923 if i then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4924 o:tag(a):text(t[a]):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4925 elseif i==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4926 local t="feature-not-implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4927 e:event("authentication-failure",{condition=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4928 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4929 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4930 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4931 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4932 for t,e in pairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4933 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4934 o:tag(t):text(e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4935 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4936 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4937 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4938 e:send_iq(o,function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4939 if a.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4940 e.resource=t.resource;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4941 e.jid=t.username.."@"..e.host.."/"..t.resource;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4942 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4943 e:event("bind-success",e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4944 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4945 local a,t,a=a:get_error();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4946 e:event("authentication-failure",{condition=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4947 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4948 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4949 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4950 local function t(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4951 if not t.version then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4952 e:send_iq(i.iq({type="get"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4953 :tag("query",{xmlns="jabber:iq:auth"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4954 :tag("username"):text(e.username),
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4955 n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4956 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4957 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4958 e:hook("opened",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4959 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4960 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4961 package.preload['verse.plugins.compression']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4962 local a=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4963 local i=require"zlib";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4964 local e="http://jabber.org/features/compress"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4965 local t="http://jabber.org/protocol/compress"
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4966 local e="http://etherx.jabber.org/streams";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4967 local e=9;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4968 local function h(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4969 local i,e=pcall(i.deflate,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4970 if i==false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4971 local t=a.stanza("failure",{xmlns=t}):tag("setup-failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4972 o:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4973 o:error("Failed to create zlib.deflate filter: %s",tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4974 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4975 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4976 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4977 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4978 local function d(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4979 local i,e=pcall(i.inflate);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4980 if i==false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4981 local t=a.stanza("failure",{xmlns=t}):tag("setup-failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4982 o:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4983 o:error("Failed to create zlib.inflate filter: %s",tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4984 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4985 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4986 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4987 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
4988 local function l(e,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4989 function e:send(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4990 local i,o,n=pcall(o,tostring(i),'sync');
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4991 if i==false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4992 e:close({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4993 condition="undefined-condition";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4994 text=o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4995 extra=a.stanza("failure",{xmlns=t}):tag("processing-failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4996 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4997 e:warn("Compressed send failed: %s",tostring(o));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4998 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4999 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5000 e.conn:write(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5001 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5002 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5003 local function r(e,i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5004 local s=e.data
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5005 e.data=function(n,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5006 e:debug("Decompressing data...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5007 local i,o,h=pcall(i,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5008 if i==false then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5009 e:close({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5010 condition="undefined-condition";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5011 text=o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5012 extra=a.stanza("failure",{xmlns=t}):tag("processing-failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5013 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5014 stream:warn("%s",tostring(o));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5015 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5016 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5017 return s(n,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5018 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5019 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5020 function a.plugins.compression(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5021 local function i(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5022 if not e.compressed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5023 local o=o:child_with_name("compression");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5024 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5025 for o in o:children()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5026 local o=o[1]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5027 if o=="zlib"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5028 e:send(a.stanza("compress",{xmlns=t}):tag("method"):text("zlib"))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5029 e:debug("Enabled compression using zlib.")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5030 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5031 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5032 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5033 session:debug("Remote server supports no compression algorithm we support.")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5034 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5035 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5036 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5037 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5038 if t.name=="compressed"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5039 e:debug("Activating compression...")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5040 local t=h(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5041 if not t then return end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5042 local a=d(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5043 if not a then return end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5044 l(e,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5045 r(e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5046 e.compressed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5047 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5048 elseif t.name=="failure"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5049 e:warn("Failed to establish compression");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5050 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5051 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5052 e:hook("stream-features",i,250);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5053 e:hook("stream/"..t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5054 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5055 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5056 package.preload['verse.plugins.smacks']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5057 local s=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5058 local h=require"socket".gettime;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5059 local n="urn:xmpp:sm:2";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5060 function s.plugins.smacks(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5061 local t={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5062 local a=0;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5063 local r=h();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5064 local o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5065 local i=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5066 local function l(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5067 if t.attr.xmlns=="jabber:client"or not t.attr.xmlns then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5068 i=i+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5069 e:debug("Increasing handled stanzas to %d for %s",i,t:top_tag());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5070 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5071 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5072 local function d(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5073 if a.name and not a.attr.xmlns then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5074 t[#t+1]=tostring(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5075 r=h();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5076 if not o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5077 o=true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5078 e:debug("Waiting to send ack request...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5079 s.add_task(1,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5080 if#t==0 then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5081 o=false;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5082 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5083 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5084 local a=h()-r;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5085 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
5086 return 1-a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5087 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5088 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
5089 o=false;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5090 e:send(s.stanza("r",{xmlns=n}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5091 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5092 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5093 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5094 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5095 local function h()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5096 e:debug("smacks: connection lost");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5097 e.stream_management_supported=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5098 if e.resumption_token then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5099 e:debug("smacks: have resumption token, reconnecting in 1s...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5100 e.authenticated=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5101 s.add_task(1,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5102 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
5103 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5104 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5105 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5106 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5107 local function r()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5108 e.resumption_token=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5109 e:unhook("disconnected",h);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5110 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5111 local function u(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5112 if o.name=="r"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5113 e:debug("Ack requested... acking %d handled stanzas",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5114 e:send(s.stanza("a",{xmlns=n,h=tostring(i)}));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5115 elseif o.name=="a"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5116 local o=tonumber(o.attr.h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5117 if o>a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5118 local i=#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5119 for a=a+1,o do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5120 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5121 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5122 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
5123 a=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5124 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5125 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
5126 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5127 elseif o.name=="enabled"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5128 if o.attr.id then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5129 e.resumption_token=o.attr.id;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5130 e:hook("closed",r,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5131 e:hook("disconnected",h,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5132 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5133 elseif o.name=="resumed"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5134 local o=tonumber(o.attr.h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5135 if o>a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5136 local i=#t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5137 for a=a+1,o do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5138 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5139 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5140 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
5141 a=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5142 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5143 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5144 e:send(t[a]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5145 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5146 t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5147 e:debug("Resumed successfully");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5148 e:event("resumed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5149 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5150 e:warn("Don't know how to handle "..n.."/"..o.name);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5151 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5152 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5153 local function o()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5154 if not e.smacks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5155 e:debug("smacks: sending enable");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5156 e:send(s.stanza("enable",{xmlns=n,resume="true"}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5157 e.smacks=true;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5158 e:hook("stanza",l);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5159 e:hook("outgoing",d);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5160 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5161 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5162 local function a(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5163 if t:get_child("sm",n)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5164 e.stream_management_supported=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5165 if e.smacks and e.bound then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5166 e:debug("Resuming stream with %d handled stanzas",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5167 e:send(s.stanza("resume",{xmlns=n,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5168 h=i,previd=e.resumption_token}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5169 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5170 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5171 e:hook("bind-success",o,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5172 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5173 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5174 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5175 e:hook("stream-features",a,250);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5176 e:hook("stream/"..n,u);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5177 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5178 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5179 package.preload['verse.plugins.keepalive']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5180 local t=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5181 function t.plugins.keepalive(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5182 e.keepalive_timeout=e.keepalive_timeout or 300;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5183 t.add_task(e.keepalive_timeout,function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5184 e.conn:write(" ");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5185 return e.keepalive_timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5186 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5187 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5188 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5189 package.preload['verse.plugins.disco']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5190 local a=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5191 local r=require("mime").b64;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5192 local h=require("util.hashes").sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5193 local s="http://jabber.org/protocol/caps";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5194 local e="http://jabber.org/protocol/disco";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5195 local i=e.."#info";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5196 local o=e.."#items";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5197 function a.plugins.disco(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5198 e:add_plugin("presence");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5199 local t={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5200 __index=function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5201 local a={identities={},features={}};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5202 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
5203 return t[false][e]
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5204 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5205 t[e]=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5206 return a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5207 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5208 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5209 local n={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5210 __index=function(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5211 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5212 t[a]=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5213 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5214 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5215 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5216 e.disco={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5217 cache={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5218 info=setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5219 [false]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5220 identities={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5221 {category='client',type='pc',name='Verse'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5222 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5223 features={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5224 [s]=true,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5225 [i]=true,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5226 [o]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5227 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5228 },
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5229 },t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5230 items=setmetatable({[false]={}},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5231 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5232 e.caps={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5233 e.caps.node='http://code.matthewwild.co.uk/verse/'
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5234 local function n(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5235 if t.category<e.category then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5236 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5237 elseif e.category<t.category then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5238 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5239 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5240 if t.type<e.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5241 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5242 elseif e.type<t.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5243 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5245 if(not t['xml:lang']and e['xml:lang'])or
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5246 (e['xml:lang']and t['xml:lang']<e['xml:lang'])then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5247 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5248 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5249 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5250 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5251 local function d(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5252 return e.var<t.var
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5253 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5254 local function l(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5255 local t=e.disco.info[o or false].identities;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5256 table.sort(t,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5257 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5258 for e in pairs(e.disco.info[o or false].features)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5259 a[#a+1]={var=e};
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 table.sort(a,d)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5262 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5263 for a,t in pairs(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5264 e[#e+1]=table.concat({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5265 t.category,t.type or'',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5266 t['xml:lang']or'',t.name or''
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5267 },'/');
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5268 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5269 for a,t in pairs(a)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5270 e[#e+1]=t.var
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5271 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5272 e[#e+1]='';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5273 e=table.concat(e,'<');
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5274 return(r(h(e)))
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5275 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5276 setmetatable(e.caps,{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5277 __call=function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5278 local t=l()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5279 e.caps.hash=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5280 return a.stanza('c',{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5281 xmlns=s,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5282 hash='sha-1',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5283 node=e.caps.node,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5284 ver=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5285 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5286 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5287 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5288 function e:set_identity(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5289 self.disco.info[a or false].identities={t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5290 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5291 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5292 function e:add_identity(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5293 local t=self.disco.info[t or false].identities;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5294 t[#t+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5295 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5296 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5297 function e:add_disco_feature(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5298 local t=t.var or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5299 self.disco.info[a or false].features[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5300 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5301 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5302 function e:remove_disco_feature(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5303 local t=t.var or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5304 self.disco.info[a or false].features[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5305 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5306 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5307 function e:add_disco_item(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5308 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5309 e[#e+1]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5310 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5311 function e:remove_disco_item(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5312 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5313 for t=#e,1,-1 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5314 if e[t]==a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5315 table.remove(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5317 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5318 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5319 function e:jid_has_identity(e,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5320 local o=self.disco.cache[e];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5321 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5322 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5323 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5324 local e=self.disco.cache[e].identities;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5325 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5326 return e[t.."/"..a]or false;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5327 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5328 for e in pairs(e)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5329 if e:match("^(.*)/")==t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5330 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5331 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5332 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5333 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5334 function e:jid_supports(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5335 local e=self.disco.cache[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5336 if not e or not e.features then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5337 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5338 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5339 return e.features[t]or false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5340 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5341 function e:get_local_services(o,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5342 local e=self.disco.cache[self.host];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5343 if not(e)or not(e.items)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5344 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5345 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5346 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5347 for i,e in ipairs(e.items)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5348 if self:jid_has_identity(e.jid,o,a)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5349 table.insert(t,e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5350 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5351 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5352 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5353 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5354 function e:disco_local_services(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5355 self:disco_items(self.host,nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5356 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5357 return a({});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5358 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5359 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5360 local function o()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5361 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5362 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5363 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5365 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5366 for a,t in ipairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5367 if t.jid then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5368 e=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5369 self:disco_info(t.jid,nil,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5370 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5371 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5372 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5373 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5374 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5375 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5376 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5377 function e:disco_info(e,t,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5378 local a=a.iq({to=e,type="get"})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5379 :tag("query",{xmlns=i,node=t});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5380 self:send_iq(a,function(n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5381 if n.attr.type=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5382 return s(nil,n:get_error());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5383 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5384 local o,a={},{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5385 for e in n:get_child("query",i):childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5386 if e.name=="identity"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5387 o[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
5388 elseif e.name=="feature"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5389 a[e.attr.var]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5390 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5391 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5392 if not self.disco.cache[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5393 self.disco.cache[e]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5394 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5395 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5396 if not self.disco.cache[e].nodes[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5397 self.disco.cache[e].nodes[t]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5398 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5399 self.disco.cache[e].nodes[t].identities=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5400 self.disco.cache[e].nodes[t].features=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5401 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5402 self.disco.cache[e].identities=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5403 self.disco.cache[e].features=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5404 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5405 return s(self.disco.cache[e]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5406 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5407 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5408 function e:disco_items(t,i,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5409 local a=a.iq({to=t,type="get"})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5410 :tag("query",{xmlns=o,node=i});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5411 self:send_iq(a,function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5412 if a.attr.type=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5413 return n(nil,a:get_error());
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5414 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5415 local e={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5416 for t in a:get_child("query",o):childtags()do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5417 if t.name=="item"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5418 table.insert(e,{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5419 name=t.attr.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5420 jid=t.attr.jid;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5421 node=t.attr.node;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5422 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5423 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5424 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5425 if not self.disco.cache[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5426 self.disco.cache[t]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5427 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5428 if i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5429 if not self.disco.cache[t].nodes[i]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5430 self.disco.cache[t].nodes[i]={nodes={}};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5431 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5432 self.disco.cache[t].nodes[i].items=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5433 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5434 self.disco.cache[t].items=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5435 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5436 return n(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5437 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5438 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5439 e:hook("iq/"..i,function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5440 local t=o.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5441 if o.attr.type=='get'and t.name=="query"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5442 local t=t.attr.node;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5443 local n=e.disco.info[t or false];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5444 if t and t==e.caps.node.."#"..e.caps.hash then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5445 n=e.disco.info[false];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5446 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5447 local n,s=n.identities,n.features
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5448 local t=a.reply(o):tag("query",{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5449 xmlns=i,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5450 node=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5451 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5452 for a,e in pairs(n)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5453 t:tag('identity',e):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5454 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5455 for a in pairs(s)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5456 t:tag('feature',{var=a}):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5457 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5458 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5459 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5460 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5461 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5462 e:hook("iq/"..o,function(i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5463 local t=i.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5464 if i.attr.type=='get'and t.name=="query"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5465 local n=e.disco.items[t.attr.node or false];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5466 local t=a.reply(i):tag('query',{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5467 xmlns=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5468 node=t.attr.node
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5469 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5470 for a=1,#n do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5471 t:tag('item',n[a]):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5473 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5474 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5475 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5476 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5477 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5478 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5479 if t then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5480 t=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5481 e:disco_local_services(function(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5482 for t,a in ipairs(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5483 local t=e.disco.cache[a.jid];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5484 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5485 for t in pairs(t.identities)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5486 local o,t=t:match("^(.*)/(.*)$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5487 e:event("disco/service-discovered/"..o,{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5488 type=t,jid=a.jid;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5489 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5490 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5491 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5492 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5493 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5494 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5495 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5496 end,50);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5497 e:hook("presence-out",function(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5498 if not t:get_child("c",s)then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5499 t:reset():add_child(e:caps()):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5500 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5501 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5502 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5503 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5504 package.preload['verse.plugins.version']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5505 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5506 local a="jabber:iq:version";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5507 local function i(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5508 e.name=t.name;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5509 e.version=t.version;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5510 e.platform=t.platform;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5511 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5512 function o.plugins.version(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5513 e.version={set=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5514 e:hook("iq/"..a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5515 if t.attr.type~="get"then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5516 local t=o.reply(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5517 :tag("query",{xmlns=a});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5518 if e.version.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5519 t:tag("name"):text(tostring(e.version.name)):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5520 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5521 if e.version.version then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5522 t:tag("version"):text(tostring(e.version.version)):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5523 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5524 if e.version.platform then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5525 t:tag("os"):text(e.version.platform);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5526 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5527 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5528 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5529 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5530 function e:query_version(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5531 t=t or function(e)return self:event("version/response",e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5532 self:send_iq(o.iq({type="get",to=e})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5533 :tag("query",{xmlns=a}),
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5534 function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5535 if o.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5536 local e=o:get_child("query",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5537 local o=e and e:get_child_text("name");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5538 local a=e and e:get_child_text("version");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5539 local e=e and e:get_child_text("os");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5540 t({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5541 name=o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5542 version=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5543 platform=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5544 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5545 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5546 local e,o,a=o:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5547 t({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5548 error=true;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5549 condition=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5550 text=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5551 type=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5552 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5553 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5554 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5556 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5557 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5558 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5559 package.preload['verse.plugins.ping']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5560 local t=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5561 local i=require"socket".gettime;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5562 local n="urn:xmpp:ping";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5563 function t.plugins.ping(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5564 function e:ping(a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5565 local s=i();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5566 e:send_iq(t.iq{to=a,type="get"}:tag("ping",{xmlns=n}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5567 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5568 if e.attr.type=="error"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5569 local t,e,i=e:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5570 if e~="service-unavailable"and e~="feature-not-implemented"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5571 o(nil,a,{type=t,condition=e,text=i});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5572 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5573 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5574 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5575 o(i()-s,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5576 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5577 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5578 e:hook("iq/"..n,function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5579 return e:send(t.reply(a));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5580 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5581 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5582 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5583 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5584 package.preload['verse.plugins.uptime']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5585 local o=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5586 local t="jabber:iq:last";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5587 local function a(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5588 t.starttime=e.starttime;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5589 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5590 function o.plugins.uptime(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5591 e.uptime={set=a};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5592 e:hook("iq/"..t,function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5593 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
5594 local t=o.reply(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5595 :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
5596 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5597 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5598 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5599 function e:query_uptime(i,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5600 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
5601 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
5602 :tag("query",{xmlns=t}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5603 function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5604 local t=e:get_child("query",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5605 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
5606 local e=tonumber(t.attr.seconds);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5607 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5608 seconds=e or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5609 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5610 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5611 local e,o,t=e:get_error();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5612 a({
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5613 error=true;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5614 condition=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5615 text=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5616 type=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5617 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5618 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5619 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5620 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5621 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5622 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5623 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5624 package.preload['verse.plugins.blocking']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5625 local a=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5626 local o="urn:xmpp:blocking";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5627 function a.plugins.blocking(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5628 e.blocking={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5629 function e.blocking:block_jid(i,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5630 e:send_iq(a.iq{type="set"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5631 :tag("block",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5632 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5633 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5634 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5635 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5636 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5637 function e.blocking:unblock_jid(i,t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5638 e:send_iq(a.iq{type="set"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5639 :tag("unblock",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5640 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5641 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5642 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5643 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5644 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5645 function e.blocking:unblock_all_jids(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5646 e:send_iq(a.iq{type="set"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5647 :tag("unblock",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5648 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5649 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5650 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5651 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5652 function e.blocking:get_blocked_jids(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5653 e:send_iq(a.iq{type="get"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5654 :tag("blocklist",{xmlns=o})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5655 ,function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5656 local a=e:get_child("blocklist",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5657 if not a then return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5658 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5659 for t in a:childtags()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5660 e[#e+1]=t.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5661 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5662 return t and t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5663 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5664 ,function(e)return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5665 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5666 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5667 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5668 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5669 package.preload['verse.plugins.jingle']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5670 local a=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5671 local e=require"util.timer";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5672 local o=require"util.uuid".generate;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5673 local i="urn:xmpp:jingle:1";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5674 local h="urn:xmpp:jingle:errors:1";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5675 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5676 t.__index=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5677 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5678 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5679 function a.plugins.jingle(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5680 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5681 e:add_disco_feature(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5682 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5683 function e:jingle(i)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5684 return a.eventable(setmetatable(base or{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5685 role="initiator";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5686 peer=i;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5687 sid=o();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5688 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5689 },t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5690 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5691 function e:register_jingle_transport(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5692 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5693 function e:register_jingle_content_type(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5694 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5695 local function u(n)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5696 local r=n:get_child("jingle",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5697 local s=r.attr.sid;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5698 local o=r.attr.action;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5699 local s=e:event("jingle/"..s,n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5700 if s==true then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5701 e:send(a.reply(n));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5702 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5703 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5704 if o~="session-initiate"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5705 local t=a.error_reply(n,"cancel","item-not-found")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5706 :tag("unknown-session",{xmlns=h}):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5707 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5708 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5709 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5710 local l=r.attr.sid;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5711 local o=a.eventable{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5712 role="receiver";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5713 peer=n.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5714 sid=l;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5715 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5716 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5717 setmetatable(o,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5718 local s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5719 local h,d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5720 for t in r:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5721 if t.name=="content"and t.attr.xmlns==i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5722 local i=t:child_with_name("description");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5723 local a=i.attr.xmlns;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5724 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5725 local e=e:event("jingle/content/"..a,o,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5726 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5727 h=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5728 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5729 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5730 local a=t:child_with_name("transport");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5731 local i=a.attr.xmlns;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5732 d=e:event("jingle/transport/"..i,o,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5733 if h and d then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5734 s=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5735 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5736 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5737 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5738 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5739 if not h then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5740 e:send(a.error_reply(n,"cancel","feature-not-implemented","The specified content is not supported"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5741 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5742 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5743 if not d then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5744 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
5745 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5746 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5747 e:send(a.reply(n));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5748 o.content_tag=s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5749 o.creator,o.name=s.attr.creator,s.attr.name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5750 o.content,o.transport=h,d;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5751 function o:decline()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5752 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5753 e:hook("jingle/"..l,function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5754 if e.attr.from~=o.peer then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5755 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5756 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5757 local e=e:get_child("jingle",i);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5758 return o:handle_command(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5759 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5760 e:event("jingle",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5761 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5762 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5763 function t:handle_command(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5764 local t=a.attr.action;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5765 e:debug("Handling Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5766 if t=="session-terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5767 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5768 elseif t=="session-accept"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5769 self:handle_accepted(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5770 elseif t=="transport-info"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5771 e:debug("Handling transport-info");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5772 self.transport:info_received(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5773 elseif t=="transport-replace"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5774 e:error("Peer wanted to swap transport, not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5775 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5776 e:warn("Unhandled Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5777 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5778 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5779 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5780 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5781 function t:send_command(o,t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5782 local t=a.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5783 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5784 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5785 sid=self.sid,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5786 action=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5787 initiator=self.role=="initiator"and self.stream.jid or nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5788 responder=self.role=="responder"and self.jid or nil,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5789 }):add_child(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5790 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5791 self.stream:send(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5792 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5793 self.stream:send_iq(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5794 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5795 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5796 function t:accept(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5797 local t=a.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5798 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5799 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5800 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5801 action="session-accept",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5802 responder=e.jid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5803 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5804 :tag("content",{creator=self.creator,name=self.name});
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5805 local a=self.content:generate_accept(self.content_tag:child_with_name("description"),o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5806 t:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5807 local a=self.transport:generate_accept(self.content_tag:child_with_name("transport"),o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5808 t:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5809 local a=self;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5810 e:send_iq(t,function(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5811 if t.attr.type=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5812 local a,t,a=t:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5813 e:error("session-accept rejected: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5814 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5815 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5816 a.transport:connect(function(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5817 e:warn("CONNECTED (receiver)!!!");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5818 a.state="active";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5819 a:event("connected",t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5820 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5821 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5822 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5823 e:hook("iq/"..i,u);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5824 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5825 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5826 function t:offer(t,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5827 local e=a.iq({to=self.peer,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5828 :tag("jingle",{xmlns=i,action="session-initiate",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5829 initiator=self.stream.jid,sid=self.sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5830 e:tag("content",{creator=self.role,name=t});
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5831 local t=self.stream:event("jingle/describe/"..t,o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5832 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5833 return false,"Unknown content type";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5834 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5835 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5836 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
5837 self.transport=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5838 e:add_child(t:generate_initiate());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5839 self.stream:debug("Hooking %s","jingle/"..self.sid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5840 self.stream:hook("jingle/"..self.sid,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5841 if e.attr.from~=self.peer then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5842 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5843 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5844 local e=e:get_child("jingle",i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5845 return self:handle_command(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5846 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5847 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5848 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5849 self.state="terminated";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5850 local e,a,t=e:get_error();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5851 return self:event("error",{type=e,condition=a,text=t});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5852 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5853 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5854 self.state="pending";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5855 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5856 function t:terminate(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5857 local e=a.stanza("reason"):tag(e or"success");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5858 self:send_command("session-terminate",e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5859 self.state="terminated";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5860 self.transport:disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5861 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5862 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5863 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5864 function t:destroy()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5865 self:event("terminated");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5866 self.stream:unhook("jingle/"..self.sid,self.handle_command);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5867 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5868 function t:handle_accepted(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5869 local e=e:child_with_name("transport");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5870 self.transport:handle_accepted(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5871 self.transport:connect(function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5872 self.stream:debug("CONNECTED (initiator)!")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5873 self.state="active";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5874 self:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5875 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5876 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5877 function t:set_source(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5878 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5879 local e,i=a();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5880 if e and e~=""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5881 self.transport.conn:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5882 elseif e==""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5883 return t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5884 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5885 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5886 self:terminate();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5887 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5888 self.transport.conn:unhook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5889 a=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5890 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5891 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5892 self.transport.conn:hook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5893 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5894 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5895 function t:set_sink(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5896 self.transport.conn:hook("incoming-raw",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5897 self.transport.conn:hook("disconnected",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5898 self.stream:debug("Closing sink...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5899 local e=e.reason;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5900 if e=="closed"then e=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5901 t(nil,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5902 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5903 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5904 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5905 package.preload['verse.plugins.jingle_ft']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5906 local o=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5907 local i=require"ltn12";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5908 local s=package.config:sub(1,1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5909 local t="urn:xmpp:jingle:apps:file-transfer:4";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5910 function o.plugins.jingle_ft(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5911 e:hook("ready",function()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5912 e:add_disco_feature(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5913 end,10);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5914 local a={type="file"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5915 function a:generate_accept(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5916 if e and e.save_file then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5917 self.jingle:hook("connected",function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5918 local e=i.sink.file(io.open(e.save_file,"w+"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5919 self.jingle:set_sink(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5920 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5921 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5922 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5923 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5924 local a={__index=a};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5925 e:hook("jingle/content/"..t,function(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5926 local e=e:get_child("file");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5927 local e={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5928 name=e:get_child_text("name");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5929 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
5930 desc=e:get_child_text("desc");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5931 date=e:get_child_text("date");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5932 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5933 return setmetatable({jingle=t,file=e},a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5934 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5935 e:hook("jingle/describe/file",function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5936 local a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5937 if e.timestamp then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5938 a=os.date("!%Y-%m-%dT%H:%M:%SZ",e.timestamp);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5939 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5940 return o.stanza("description",{xmlns=t})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5941 :tag("file")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5942 :tag("name"):text(e.filename):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5943 :tag("size"):text(tostring(e.size)):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5944 :tag("date"):text(a):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5945 :tag("desc"):text(e.description):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5946 :up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5947 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5948 function e:send_file(n,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5949 local e,a=io.open(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5950 if not e then return e,a;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5951 local o=e:seek("end",0);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5952 e:seek("set",0);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5953 local a=i.source.file(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5954 local e=self:jingle(n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5955 e:offer("file",{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5956 filename=t:match("[^"..s.."]+$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5957 size=o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5958 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5959 e:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5960 e:set_source(a,true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5961 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5962 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5963 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5965 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5966 package.preload['verse.plugins.jingle_s5b']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5967 local a=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5968 local o="urn:xmpp:jingle:transports:s5b:1";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5969 local r="http://jabber.org/protocol/bytestreams";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5970 local n=require"util.hashes".sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5971 local s=require"util.uuid".generate;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5972 local function d(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5973 local function a()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5974 e:unhook("connected",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5975 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5976 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5977 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5978 e:unhook("incoming-raw",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5979 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5980 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5981 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5982 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5983 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5984 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5985 local function i(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5986 e:unhook("incoming-raw",i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5987 if a~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5988 local t="version-mismatch";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5989 if a:sub(1,1)=="\005"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5990 t="authentication-failure";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5991 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5992 return e:event("error",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5993 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5994 e:send(string.char(5,1,0,3,#t)..t.."\0\0");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5995 e:hook("incoming-raw",o,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5996 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5997 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5998 e:hook("connected",a,200);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5999 e:hook("incoming-raw",i,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6000 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6001 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6002 local function h(o,e,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6003 local e=a.new(nil,{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6004 streamhosts=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6005 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6006 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6007 local function t(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6008 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6009 return o(nil,a.reason);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6010 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6011 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6012 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6013 e:debug("Attempting to connect to "..e.streamhosts[e.current_host].host..":"..e.streamhosts[e.current_host].port.."...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6014 local t,a=e:connect(
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6015 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6016 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6017 );
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6018 if not t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6019 e:debug("Error connecting to proxy (%s:%s): %s",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6020 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6021 e.streamhosts[e.current_host].port,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6022 a
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6023 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6024 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6025 e:debug("Connecting...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6026 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6027 d(e,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6028 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6029 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6030 e:unhook("disconnected",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6031 return o(nil);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6032 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6033 e:hook("disconnected",t,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6034 e:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6035 e:unhook("disconnected",t);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6036 o(e.streamhosts[e.current_host],e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6037 end,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6038 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6039 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6040 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6041 function a.plugins.jingle_s5b(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6042 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6043 e:add_disco_feature(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6044 end,10);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6045 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6046 function t:generate_initiate()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6047 self.s5b_sid=s();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6048 local a=a.stanza("transport",{xmlns=o,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6049 mode="tcp",sid=self.s5b_sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6050 local t=0;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6051 for o,i in pairs(e.proxy65.available_streamhosts)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6052 t=t+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6053 a:tag("candidate",{jid=o,host=i.host,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6054 port=i.port,cid=o,priority=t,type="proxy"}):up();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6055 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6056 e:debug("Have %d proxies",t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6057 return a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6058 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6059 function t:generate_accept(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6060 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6061 self.s5b_peer_candidates=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6062 self.s5b_mode=e.attr.mode or"tcp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6063 self.s5b_sid=e.attr.sid or self.jingle.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6064 for e in e:childtags()do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6065 t[e.attr.cid]={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6066 type=e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6067 jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6068 host=e.attr.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6069 port=tonumber(e.attr.port)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6070 priority=tonumber(e.attr.priority)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6071 cid=e.attr.cid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6072 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6073 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6074 local e=a.stanza("transport",{xmlns=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6075 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6076 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6077 function t:connect(i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6078 e:warn("Connecting!");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6079 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6080 for a,e in pairs(self.s5b_peer_candidates or{})do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6081 t[#t+1]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6082 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6083 if#t>0 then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6084 self.connecting_peer_candidates=true;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6085 local function s(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6086 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
6087 :tag("transport",{xmlns=o,sid=self.s5b_sid})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6088 :tag("candidate-used",{cid=t.cid}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6089 self.onconnect_callback=i;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6090 self.conn=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6091 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6092 local e=n(self.s5b_sid..self.peer..e.jid,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6093 h(s,t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6094 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6095 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
6096 self.onconnect_callback=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6097 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6098 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6099 function t:info_received(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6100 e:warn("Info received");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6101 local s=t:child_with_name("content");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6102 local i=s:child_with_name("transport");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6103 if i:get_child("candidate-used")and not self.connecting_peer_candidates then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6104 local t=i:child_with_name("candidate-used");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6105 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6106 local function d(i,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6107 if self.jingle.role=="initiator"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6108 self.jingle.stream:send_iq(a.iq({to=i.jid,type="set"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6109 :tag("query",{xmlns=r,sid=self.s5b_sid})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6110 :tag("activate"):text(self.jingle.peer),function(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6111 if i.attr.type=="result"then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6112 self.jingle:send_command("transport-info",a.stanza("content",s.attr)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6113 :tag("transport",{xmlns=o,sid=self.s5b_sid})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6114 :tag("activated",{cid=t.attr.cid}));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6115 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6116 self.onconnect_callback(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6117 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6118 self.jingle.stream:error("Failed to activate bytestream");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6119 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6120 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6121 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6122 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6123 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
6124 local t={
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6125 self.jingle.stream.proxy65.available_streamhosts[t.attr.cid];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6126 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6127 local e=n(self.s5b_sid..e.jid..self.peer,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6128 h(d,t,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6129 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6130 elseif i:get_child("activated")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6131 self.onconnect_callback(self.conn);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6132 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6133 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6134 function t:disconnect()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6135 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6136 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6137 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6138 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6139 function t:handle_accepted(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6140 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6141 local t={__index=t};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6142 e:hook("jingle/transport/"..o,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6143 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6144 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6145 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6146 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6147 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6148 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6149 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6150 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6151 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6152 package.preload['verse.plugins.proxy65']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6153 local a=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6154 local h=require"util.uuid";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6155 local r=require"util.hashes".sha1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6156 local n={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6157 n.__index=n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6158 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
6159 local s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6160 function a.plugins.proxy65(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6161 t.proxy65=setmetatable({stream=t},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6162 t.proxy65.available_streamhosts={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6163 local e=0;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6164 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
6165 if o.type=="bytestreams"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6166 e=e+1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6167 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
6168 :tag("query",{xmlns=i}),function(a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6169 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6170 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
6171 local e=a:get_child("query",i)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6172 :get_child("streamhost").attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6173 t.proxy65.available_streamhosts[e.jid]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6174 jid=e.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6175 host=e.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6176 port=tonumber(e.port);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6177 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6178 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6179 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6180 t:event("proxy65/discovered-proxies",t.proxy65.available_streamhosts);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6181 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6182 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6183 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6184 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6185 t:hook("iq/"..i,function(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6186 local e=a.new(nil,{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6187 initiator_jid=o.attr.from,
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6188 streamhosts={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6189 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6190 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6191 for t in o.tags[1]:childtags()do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6192 if t.name=="streamhost"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6193 table.insert(e.streamhosts,t.attr);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6194 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6195 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6196 local function i()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6197 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6198 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6199 e:connect(
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6200 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6201 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6202 );
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6203 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
6204 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6205 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6206 e:unhook("disconnected",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6207 t:send(a.error_reply(o,"cancel","item-not-found"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6209 function e:accept()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6210 e:hook("disconnected",i,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6211 e:hook("connected",function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6212 e:unhook("disconnected",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6213 local e=a.reply(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6214 :tag("query",o.tags[1].attr)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6215 :tag("streamhost-used",{jid=e.streamhosts[e.current_host].jid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6216 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6217 end,100);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6218 i();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6219 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6220 function e:refuse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6221 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6222 t:event("proxy65/request",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6223 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6224 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6225 function n:new(t,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6226 local e=a.new(nil,{
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6227 target_jid=t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6228 bytestream_sid=h.generate();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6229 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6230 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
6231 :tag("query",{xmlns=i,mode="tcp",sid=e.bytestream_sid});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6232 for t,e in ipairs(n or self.proxies)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6233 o:tag("streamhost",e):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6234 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6235 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
6236 if o.attr.type=="error"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6237 local t,a,o=o:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6238 e:event("connection-failed",{conn=e,type=t,condition=a,text=o});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6239 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6240 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
6241 e.streamhost_jid=o.attr.jid;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6242 local o,h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6243 for a,t in ipairs(n or self.proxies)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6244 if t.jid==e.streamhost_jid then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6245 o,h=t.host,t.port;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6246 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6247 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6248 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6249 e:connect(o,h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6250 local function o()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6251 e:unhook("connected",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6252 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
6253 :tag("query",{xmlns=i,sid=e.bytestream_sid})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6254 :tag("activate"):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6255 self.stream:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6256 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6257 e:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6258 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6259 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6260 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6261 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6262 e:hook("connected",o,100);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6263 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
6264 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6265 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6266 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6267 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6268 function s(i,e,t,o,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6269 local t=r(t..o..a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6270 local function i()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6271 e:unhook("connected",i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6272 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6273 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6274 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6275 e:unhook("incoming-raw",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6276 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6277 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6278 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6279 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6280 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6281 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6282 local function a(i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6283 e:unhook("incoming-raw",a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6284 if i~="\005\000"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6285 local t="version-mismatch";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6286 if i:sub(1,1)=="\005"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6287 t="authentication-failure";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6289 return e:event("error",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6290 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6291 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
6292 e:hook("incoming-raw",o,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6293 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6294 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6295 e:hook("connected",i,200);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6296 e:hook("incoming-raw",a,100);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6297 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6298 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6299 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6300 package.preload['verse.plugins.jingle_ibb']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6301 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6302 local i=require"util.encodings".base64;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6303 local s=require"util.uuid".generate;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6304 local n="urn:xmpp:jingle:transports:ibb:1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6305 local o="http://jabber.org/protocol/ibb";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6306 assert(i.encode("This is a test.")=="VGhpcyBpcyBhIHRlc3Qu","Base64 encoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6307 assert(i.decode("VGhpcyBpcyBhIHRlc3Qu")=="This is a test.","Base64 decoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6308 local t=table.concat
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6309 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6310 local t={__index=a};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6311 local function h(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6312 local t=setmetatable({stream=a},t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6313 t=e.eventable(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6314 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6315 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6316 function a:initiate(a,e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6317 self.block=2048;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6318 self.stanza=t or'iq';
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6319 self.peer=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6320 self.sid=e or tostring(self):match("%x+$");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6321 self.iseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6322 self.oseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6323 local e=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6324 return self:feed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6325 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6326 self.feeder=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6327 print("Hooking incomming IQs");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6328 local a=self.stream;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6329 a:hook("iq/"..o,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6330 if t=="message"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6331 a:hook("message",e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6332 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6333 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6334 function a:open(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6335 self.stream:send_iq(e.iq{to=self.peer,type="set"}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6336 :tag("open",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6337 xmlns=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6338 ["block-size"]=self.block,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6339 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6340 stanza=self.stanza
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6341 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6342 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6343 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6344 if e.attr.type~="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6345 t(true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6346 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6347 t(false,e:get_error())
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6349 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6350 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6351 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6352 function a:send(n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6353 local a=self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6354 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6355 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6356 t=e.iq{type="set",to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6357 elseif a=="message"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6358 t=e.message{to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6359 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6360 local e=self.oseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6361 self.oseq=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6362 t:tag("data",{xmlns=o,sid=self.sid,seq=e})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6363 :text(i.encode(n));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6364 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6365 self.stream:send_iq(t,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6366 self:event(e.attr.type=="result"and"drained"or"error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6367 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6368 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6369 stream:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6370 self:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6371 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6372 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6373 function a:feed(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6374 if t.attr.from~=self.peer then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6375 local a=t[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6376 if a.attr.sid~=self.sid then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6377 local n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6378 if a.name=="open"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6379 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6380 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6381 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6382 elseif a.name=="data"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6383 local o=t:get_child_text("data",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6384 local a=tonumber(a.attr.seq);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6385 local n=self.iseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6386 if o and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6387 if a~=n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6388 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
6389 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6390 self:event("error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6391 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6392 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6393 self.iseq=a+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6394 local a=i.decode(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6395 if self.stanza=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6396 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6397 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6398 self:event("incoming-raw",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6399 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6400 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6401 elseif a.name=="close"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6402 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6403 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6404 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6405 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6406 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6407 function a:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6408 self.stream:unhook("iq/"..o,self.feeder)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6409 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6410 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6411 function e.plugins.jingle_ibb(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6412 a:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6413 a:add_disco_feature(n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6414 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6415 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6416 function t:_setup()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6417 local e=h(self.stream);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6418 e.sid=self.sid or e.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6419 e.stanza=self.stanza or e.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6420 e.block=self.block or e.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6421 e:initiate(self.peer,self.sid,self.stanza);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6422 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6423 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6424 function t:generate_initiate()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6425 print("ibb:generate_initiate() as "..self.role);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6426 local t=s();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6427 self.sid=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6428 self.stanza='iq';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6429 self.block=2048;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6430 local e=e.stanza("transport",{xmlns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6431 sid=self.sid,stanza=self.stanza,["block-size"]=self.block});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6432 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6433 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6434 function t:generate_accept(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6435 print("ibb:generate_accept() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6436 local e=t.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6437 self.sid=e.sid or self.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6438 self.stanza=e.stanza or self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6439 self.block=e["block-size"]or self.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6440 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6441 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6443 function t:connect(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6444 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6445 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6446 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6447 local e=self.conn;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6448 print("ibb:connect() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6449 if self.role=="initiator"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6450 e:open(function(a,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6451 assert(a,table.concat({...},", "));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6452 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6453 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6454 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6455 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6456 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6457 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6458 function t:info_received(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6459 print("ibb:info_received()");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6460 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6461 function t:disconnect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6462 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6463 self.conn:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6464 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6465 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6466 function t:handle_accepted(e)end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6467 local t={__index=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6468 a:hook("jingle/transport/"..n,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6469 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6470 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6471 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6472 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6473 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6474 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6475 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6476 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6477 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6478 package.preload['verse.plugins.pubsub']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6479 local i=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6480 local h=table.insert;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6481 local o="http://jabber.org/protocol/pubsub";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6482 local s="http://jabber.org/protocol/pubsub#owner";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6483 local a="http://jabber.org/protocol/pubsub#event";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6484 local e={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6485 local n={__index=e};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6486 function i.plugins.pubsub(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6487 e.pubsub=setmetatable({stream=e},n);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6488 e:hook("message",function(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6489 local o=t.attr.from;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6490 for t in t:childtags("event",a)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6491 local t=t:get_child("items");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6492 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6493 local a=t.attr.node;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6494 for t in t:childtags("item")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6495 e:event("pubsub/event",{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6496 from=o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6497 node=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6498 item=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6499 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6500 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6501 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6502 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6503 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6504 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6505 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6506 function e:create(e,t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6507 return self:service(e):node(t):create(nil,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6508 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6509 function e:subscribe(e,t,a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6510 return self:service(e):node(t):subscribe(a,nil,o);
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 function e:publish(i,o,t,e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6513 return self:service(i):node(o):publish(t,nil,e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6514 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6515 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6516 local t={__index=a};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6517 function e:service(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6518 return setmetatable({stream=self.stream,service=e},t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6519 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6520 local function t(r,h,e,a,n,s,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6521 local e=i.iq{type=r or"get",to=h}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6522 :tag("pubsub",{xmlns=e or o})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6523 if a then e:tag(a,{node=n,jid=s});end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6524 if t then e:tag("item",{id=t~=true and t or nil});end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6525 return e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6526 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6527 function a:subscriptions(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6528 self.stream:send_iq(t(nil,self.service,nil,"subscriptions")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6529 ,a and function(i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6530 if i.attr.type=="result"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6531 local e=i:get_child("pubsub",o);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6532 local e=e and e:get_child("subscriptions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6533 local o={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6534 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6535 for t in e:childtags("subscription")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6536 local e=self:node(t.attr.node)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6537 e.subscription=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6538 e.subscribed_jid=t.attr.jid;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6539 h(o,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6540 end
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 a(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6543 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6544 a(false,i:get_error());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6545 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6546 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6547 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6548 function a:affiliations(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6549 self.stream:send_iq(t(nil,self.service,nil,"affiliations")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6550 ,e and function(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6551 if t.attr.type=="result"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6552 local t=t:get_child("pubsub",o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6553 local t=t and t:get_child("affiliations")or{};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6554 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6555 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6556 for t in t:childtags("affiliation")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6557 local e=self:node(t.attr.node)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6558 e.affiliation=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6559 h(a,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6560 end
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 e(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6563 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6564 e(false,t:get_error());
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6565 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6566 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6567 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6568 function a:nodes(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6569 self.stream:disco_items(self.service,nil,function(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6570 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6571 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6572 e[t]=self:node(e[t].node);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6573 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6574 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6575 a(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6576 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6577 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6578 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6579 local o={__index=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6580 function a:node(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6581 return setmetatable({stream=self.stream,service=self.service,node=e},o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6582 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6583 function n:__call(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6584 local t=self:service(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6585 return e and t:node(e)or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6586 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6587 function e:hook(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6588 self._hooks=self._hooks or setmetatable({},{__mode='kv'});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6589 local function t(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6590 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
6591 return a(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6592 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6593 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6594 self._hooks[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6595 self.stream:hook("pubsub/event",t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6596 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6597 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6598 function e:unhook(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6599 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6600 local e=self._hooks[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6601 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6602 elseif self._hooks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6603 for e in pairs(self._hooks)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6604 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6605 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6606 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6607 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6608 function e:create(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6609 if e~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6610 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6611 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6612 self.stream:send_iq(t("set",self.service,nil,"create",self.node),a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6613 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6614 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6615 function e:configure(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6616 if e~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6617 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6618 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6619 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
6620 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6621 function e:publish(i,a,e,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6622 if a~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6623 error("Node configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6624 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6625 self.stream:send_iq(t("set",self.service,nil,"publish",self.node,nil,i or true)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6626 :add_child(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6627 ,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6628 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6629 function e:subscribe(e,o,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6630 e=e or self.stream.jid;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6631 if o~=nil then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6632 error("Subscription configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6633 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6634 self.stream:send_iq(t("set",self.service,nil,"subscribe",self.node,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6635 ,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6636 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6637 function e:subscription(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6638 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6639 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6640 function e:affiliation(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6641 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6642 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6643 function e:unsubscribe(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6644 e=e or self.subscribed_jid or self.stream.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6645 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
6646 ,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6647 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6648 function e:configure_subscription(e,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6649 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6650 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6651 function e:items(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6652 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6653 self.stream:send_iq(t("get",self.service,nil,"items",self.node)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6654 ,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6655 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6656 self.stream:disco_items(self.service,self.node,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6657 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6658 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6659 function e:item(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6660 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
6661 ,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6662 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6663 function e:retract(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6664 self.stream:send_iq(t("set",self.service,nil,"retract",self.node,nil,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6665 ,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6666 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6667 function e:purge(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6668 assert(not a,"Not implemented yet.");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6669 self.stream:send_iq(t("set",self.service,s,"purge",self.node)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6670 ,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6671 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6672 function e:delete(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6673 assert(not a,"Not implemented yet.");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6674 self.stream:send_iq(t("set",self.service,s,"delete",self.node)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6675 ,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6676 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6677 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6678 package.preload['verse.plugins.pep']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6679 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6680 local t="http://jabber.org/protocol/pubsub";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6681 local t=t.."#event";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6682 function e.plugins.pep(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6683 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6684 e:add_plugin("pubsub");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6685 e.pep={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6686 e:hook("pubsub/event",function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6687 return e:event("pep/"..t.node,{from=t.from,item=t.item.tags[1]});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6688 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6689 function e:hook_pep(t,i,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6690 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6691 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6692 e:add_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6693 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6694 e:hook("pep/"..t,i,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6695 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6696 function e:unhook_pep(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6697 e:unhook("pep/"..t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6698 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6699 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6700 e:remove_disco_feature(t.."+notify");
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 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6703 function e:publish_pep(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6704 return e.pubsub:service(nil):node(a or t.attr.xmlns):publish(nil,nil,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6705 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6706 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6707 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6708 package.preload['verse.plugins.adhoc']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6709 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6710 local n=require"lib.adhoc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6711 local t="http://jabber.org/protocol/commands";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6712 local s="jabber:x:data";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6713 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6714 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6715 local i={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6716 function o.plugins.adhoc(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6717 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6718 e:add_disco_feature(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6719 function e:query_commands(a,o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6720 e:disco_items(a,t,function(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6721 e:debug("adhoc list returned")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6722 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6723 for o,t in ipairs(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6724 a[t.node]=t.name;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6725 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6726 e:debug("adhoc calling callback")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6727 return o(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6728 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6729 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6730 function e:execute_command(i,o,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6731 local e=setmetatable({
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6732 stream=e,jid=i,
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6733 command=o,callback=t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6734 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6735 return e:execute();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6736 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6737 local function s(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6738 if not(e)or e=="user"then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6739 if type(e)=="function"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6740 return e(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6741 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6742 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6743 function e:add_adhoc_command(o,a,h,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6744 i[a]=n.new(o,a,h,s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6745 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
6746 return i[a];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6747 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6748 local function h(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6749 local a=t.tags[1];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6750 local a=a.attr.node;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6751 local a=i[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6752 if not a then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6753 if not s(t.attr.from,a.permission)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6754 e:send(o.error_reply(t,"auth","forbidden","You don't have permission to execute this command"):up()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6755 :add_child(a:cmdtag("canceled")
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6756 :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
6757 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6758 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6759 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
6760 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6761 e:hook("iq/"..t,function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6762 local t=e.attr.type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6763 local a=e.tags[1].name;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6764 if t=="set"and a=="command"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6765 return h(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6766 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6767 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6768 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6769 function a:_process_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6770 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6771 self.status="canceled";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6772 self.callback(self,{});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6773 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6774 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6775 local e=e:get_child("command",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6776 self.status=e.attr.status;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6777 self.sessionid=e.attr.sessionid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6778 self.form=e:get_child("x",s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6779 self.note=e:get_child("note");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6780 self.callback(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6781 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6782 function a:execute()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6783 local e=o.iq({to=self.jid,type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6784 :tag("command",{xmlns=t,node=self.command});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6785 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6786 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6787 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6788 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6789 function a:next(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6790 local e=o.iq({to=self.jid,type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6791 :tag("command",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6792 xmlns=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6793 node=self.command,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6794 sessionid=self.sessionid
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6795 });
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6796 if a then e:add_child(a);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6797 self.stream:send_iq(e,function(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6798 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6799 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6800 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6801 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6802 package.preload['verse.plugins.presence']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6803 local a=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6804 function a.plugins.presence(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6805 t.last_presence=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6806 t:hook("presence-out",function(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6807 if not e.attr.to then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6808 t.last_presence=e;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6809 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6810 end,1);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6811 function t:resend_presence()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6812 if last_presence then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6813 t:send(last_presence);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6814 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6815 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6816 function t:set_status(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6817 local a=a.presence();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6818 if type(e)=="table"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6819 if e.show then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6820 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
6821 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6822 if e.prio then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6823 a:tag("priority"):text(tostring(e.prio)):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6824 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6825 if e.msg then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6826 a:tag("status"):text(e.msg):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6827 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6828 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6829 t:send(a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6830 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6831 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6832 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6833 package.preload['verse.plugins.private']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6834 local t=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6835 local a="jabber:iq:private";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6836 function t.plugins.private(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6837 function o:private_set(o,i,e,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6838 local t=t.iq({type="set"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6839 :tag("query",{xmlns=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6840 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6841 if e.name==o and e.attr and e.attr.xmlns==i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6842 t:add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6843 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6844 t:tag(o,{xmlns=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6845 :add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6846 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6847 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6848 self:send_iq(t,n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6849 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6850 function o:private_get(e,o,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6851 self:send_iq(t.iq({type="get"})
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6852 :tag("query",{xmlns=a})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6853 :tag(e,{xmlns=o}),
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6854 function(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6855 if t.attr.type=="result"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6856 local t=t:get_child("query",a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6857 local e=t:get_child(e,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6858 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6859 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6860 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6861 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6862 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6863 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6864 package.preload['verse.plugins.roster']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6865 local i=require"verse";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6866 local d=require"util.jid".bare;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6867 local a="jabber:iq:roster";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6868 local o="urn:xmpp:features:rosterver";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6869 local n=table.insert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6870 function i.plugins.roster(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6871 local r=false;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6872 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6873 items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6874 ver="";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6875 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6876 t.roster=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6877 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
6878 if e:get_child("ver",o)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6879 r=true;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6880 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6881 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6882 local function s(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6883 local e=i.stanza("item",{xmlns=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6884 for a,t in pairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6885 if a~="groups"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6886 e.attr[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6887 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6888 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6889 e:tag("group"):text(t[a]):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6890 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6891 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6892 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6893 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6894 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6895 local function l(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6896 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6897 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6898 e.groups=a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6899 for t,a in pairs(o.attr)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6900 if t~="xmlns"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6901 e[t]=a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6902 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6903 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6904 for e in o:childtags("group")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6905 n(a,e:get_text())
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6906 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6907 return e;
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 function e:load(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6910 e.ver,e.items=t.ver,t.items;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6911 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6912 function e:dump()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6913 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6914 ver=e.ver,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6915 items=e.items,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6916 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6917 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6918 function e:add_contact(o,n,h,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6919 local o={jid=o,name=n,groups=h};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6920 local a=i.iq({type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6921 :tag("query",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6922 :add_child(s(o));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6923 t:send_iq(a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6924 if not e then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6925 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6926 e(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6927 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6928 e(nil,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6929 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6930 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6931 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6932 function e:delete_contact(o,n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6933 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
6934 local h={jid=o,subscription="remove"}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6935 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
6936 t:send_iq(i.iq({type="set"})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6937 :tag("query",{xmlns=a})
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6938 :add_child(s(h)),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6939 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6940 if not n then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6941 if e.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6942 n(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6943 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6944 n(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6945 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6946 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6947 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6948 local function h(t)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6949 local t=l(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6950 e.items[t.jid]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6951 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6952 local function l(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6953 local a=e.items[t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6954 e.items[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6955 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6956 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6957 function e:fetch(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6958 t:send_iq(i.iq({type="get"}):tag("query",{xmlns=a,ver=r and e.ver or nil}),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6959 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6960 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6961 local t=t:get_child("query",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6962 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6963 e.items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6964 for t in t:childtags("item")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6965 h(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6966 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6967 e.ver=t.attr.ver or"";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6968 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6969 o(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6970 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6971 o(nil,t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6972 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6973 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6974 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6975 t:hook("iq/"..a,function(n)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6976 local s,o=n.attr.type,n.attr.from;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6977 if s=="set"and(not o or o==d(t.jid))then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6978 local s=n:get_child("query",a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6979 local o=s and s:get_child("item");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6980 if o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6981 local n,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6982 local i=o.attr.jid;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6983 if o.attr.subscription=="remove"then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6984 n="removed"
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6985 a=l(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6986 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6987 n=e.items[i]and"changed"or"added";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6988 h(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6989 a=e.items[i];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6990 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6991 e.ver=s.attr.ver;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6992 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6993 t:event("roster/item-"..n,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6994 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6995 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
6996 t:send(i.reply(n))
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6997 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6998 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6999 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7000 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7001 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7002 package.preload['verse.plugins.register']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7003 local t=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7004 local o="jabber:iq:register";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7005 function t.plugins.register(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7006 local function a(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7007 if i:get_child("register","http://jabber.org/features/iq-register")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7008 local t=t.iq({to=e.host_,type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7009 :tag("query",{xmlns=o})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7010 :tag("username"):text(e.username):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7011 :tag("password"):text(e.password):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7012 if e.register_email then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7013 t:tag("email"):text(e.register_email):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7014 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7015 e:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7016 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7017 e:event("registration-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7018 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7019 local a,t,o=t:get_error();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7020 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
7021 e:event("registration-failure",{type=a,condition=t,text=o});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7022 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7023 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7024 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7025 e:debug("In-band registration not offered by server");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7026 e:event("registration-failure",{condition="service-unavailable"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7027 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7028 e:unhook("stream-features",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7029 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7030 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7031 e:hook("stream-features",a,310);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7032 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7033 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7034 package.preload['verse.plugins.groupchat']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7035 local i=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7036 local e=require"events";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7037 local n=require"util.jid";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7038 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7039 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7040 local h="urn:xmpp:delay";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7041 local s="http://jabber.org/protocol/muc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7042 function i.plugins.groupchat(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7043 o:add_plugin("presence")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7044 o.rooms={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7045 o:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7046 local a=n.bare(e.attr.from);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7047 if not a then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7048 local t=o.rooms[a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7049 if not t and e.attr.to and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7050 t=o.rooms[e.attr.to.." "..a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7051 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7052 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
7053 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7054 local i=select(3,n.split(e.attr.from));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7055 local n=e:get_child_text("body");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7056 local o=e:get_child("delay",h);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7057 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7058 room_jid=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7059 room=t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7060 sender=t.occupants[i];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7061 nick=i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7062 body=n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7063 stanza=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7064 delay=(o and o.attr.stamp);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7065 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7066 local t=t:event(e.name,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7067 return t or(e.name=="message")or nil;
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,500);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7070 function o:join_room(n,h,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7071 if not h then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7072 return false,"no nickname supplied"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7073 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7074 t=t or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7075 local e=setmetatable(i.eventable{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7076 stream=o,jid=n,nick=h,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7077 subject=nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7078 occupants={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7079 opts=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7080 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7081 if t.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7082 self.rooms[t.source.." "..n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7083 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7084 self.rooms[n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7085 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7086 local a=e.occupants;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7087 e:hook("presence",function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7088 local t=o.nick or h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7089 if not a[t]and o.stanza.attr.type~="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7090 a[t]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7091 nick=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7092 jid=o.stanza.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7093 presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7094 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7095 local o=o.stanza:get_child("x",s.."#user");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7096 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7097 local e=o:get_child("item");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7098 if e and e.attr then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7099 a[t].real_jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7100 a[t].affiliation=e.attr.affiliation;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7101 a[t].role=e.attr.role;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7102 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7103 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7104 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7105 e.stream:event("groupchat/joined",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7106 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7107 e:event("occupant-joined",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7108 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7109 elseif a[t]and o.stanza.attr.type=="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7110 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7111 e.stream:event("groupchat/left",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7112 if e.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7113 self.rooms[e.opts.source.." "..n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7114 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7115 self.rooms[n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7116 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7117 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7118 a[t].presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7119 e:event("occupant-left",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7120 a[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7121 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7123 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7124 e:hook("message",function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7125 local t=a.stanza:get_child_text("subject");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7126 if not t then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7127 t=#t>0 and t or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7128 if t~=e.subject then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7129 local o=e.subject;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7130 e.subject=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7131 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
7132 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7133 end,2e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7134 local t=i.presence():tag("x",{xmlns=s}):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7135 self:event("pre-groupchat/joining",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7136 e:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7137 self:event("groupchat/joining",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7138 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7139 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7140 o:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7141 if not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7142 for a,t in pairs(o.rooms)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7143 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7144 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7145 e.attr.to=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7146 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7147 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7148 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7149 function a:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7150 if e.name=="message"and not e.attr.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7151 e.attr.type="groupchat";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7152 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7153 if e.name=="presence"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7154 e.attr.to=self.jid.."/"..self.nick;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7155 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7156 if e.attr.type=="groupchat"or not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7157 e.attr.to=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7158 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7159 if self.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7160 e.attr.from=self.opts.source
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7161 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7162 self.stream:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7163 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7164 function a:send_message(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7165 self:send(i.message():tag("body"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7166 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7167 function a:set_subject(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7168 self:send(i.message():tag("subject"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7169 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7170 function a:leave(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7171 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
7172 local e=i.presence({type="unavailable"});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7173 if t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7174 e:tag("status"):text(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7175 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7176 self:send(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7177 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7178 function a:admin_set(e,a,t,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7179 self:send(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7180 :query(s.."#admin")
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7181 :tag("item",{nick=e,[a]=t})
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7182 :tag("reason"):text(o or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7183 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7184 function a:set_role(e,a,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7185 self:admin_set(e,"role",a,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7186 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7187 function a:set_affiliation(e,t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7188 self:admin_set(e,"affiliation",t,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7189 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7190 function a:kick(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7191 self:set_role(e,"none",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7192 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7193 function a:ban(t,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7194 self:set_affiliation(t,"outcast",e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7195 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7196 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7197 package.preload['verse.plugins.vcard']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7198 local i=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7199 local o=require"util.vcard";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7200 local e="vcard-temp";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7201 function i.plugins.vcard(a)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7202 function a:get_vcard(n,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7203 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
7204 :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
7205 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
7206 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
7207 e=o.from_xep54(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7208 t(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7209 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7210 t(false)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7211 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7212 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7213 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7214 function a:set_vcard(e,n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7215 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7216 if type(e)=="table"and e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7217 t=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7218 elseif type(e)=="string"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7219 t=o.to_xep54(o.from_text(e)[1]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7220 elseif type(e)=="table"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7221 t=o.to_xep54(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7222 error("Converting a table to vCard not implemented")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7223 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7224 if not t then return false end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7225 a:debug("setting vcard to %s",tostring(t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7226 a:send_iq(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7227 :add_child(t),n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7228 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7229 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7230 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7231 package.preload['verse.plugins.vcard_update']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7232 local n=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7233 local i="vcard-temp:x:update";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7234 local s=require("util.hashes").sha1;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7235 local e,t=pcall(function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7236 local e=require("util.encodings").base64.decode;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7237 assert(e("SGVsbG8=")=="Hello")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7238 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7239 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7240 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7241 e,t=pcall(function()return require("mime").unb64;end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7242 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7243 error("Could not find a base64 decoder")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7245 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7246 local h=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7247 function n.plugins.vcard_update(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7248 e:add_plugin("vcard");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7249 e:add_plugin("presence");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7250 local t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7251 local function r(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7252 local a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7253 for e=1,#o do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7254 if o[e].name=="PHOTO"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7255 a=o[e][1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7256 break
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7257 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7258 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7259 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7260 local a=s(h(a),true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7261 t=n.stanza("x",{xmlns=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7262 :tag("photo"):text(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7263 e:resend_presence()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7264 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7265 t=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7266 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7267 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7268 local a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7269 e:hook("ready",function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7270 if a then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7271 a=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7272 e:get_vcard(nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7273 if t then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7274 r(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7275 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7276 e:event("ready");
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 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7279 end,3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7280 e:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7281 if t and not e:get_child("x",i)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7282 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7283 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7284 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7285 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7286 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7287 package.preload['verse.plugins.carbons']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7288 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7289 local a="urn:xmpp:carbons:2";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7290 local r="urn:xmpp:forward:0";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7291 local h=os.time;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7292 local s=require"util.datetime".parse;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7293 local n=require"util.jid".bare;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7294 function o.plugins.carbons(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7295 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7296 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7297 e.carbons=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7298 function t:enable(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7299 e:send_iq(o.iq{type="set"}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7300 :tag("enable",{xmlns=a})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7301 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7302 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7303 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7304 t.enabled=true;
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 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7307 i(e);
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 or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7310 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7311 function t:disable(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7312 e:send_iq(o.iq{type="set"}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7313 :tag("disable",{xmlns=a})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7314 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7315 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7316 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7317 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7318 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7319 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7320 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7321 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7322 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7323 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7324 local o;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7325 e:hook("bind-success",function()
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7326 o=n(e.jid);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7327 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7328 e:hook("message",function(i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7329 local t=i:get_child(nil,a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7330 if i.attr.from==o and t then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7331 local o=t.name;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7332 local t=t:get_child("forwarded",r);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7333 local a=t and t:get_child("message","jabber:client");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7334 local t=t:get_child("delay","urn:xmpp:delay");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7335 local t=t and t.attr.stamp;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7336 t=t and s(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7337 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7338 return e:event("carbon",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7339 dir=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7340 stanza=a,
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7341 timestamp=t or h(),
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7342 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7343 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7344 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7345 end,1);
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 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7348 package.preload['verse.plugins.archive']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7349 local a=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7350 local t=require"util.stanza";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7351 local e="urn:xmpp:mam:0"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7352 local h="urn:xmpp:forward:0";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7353 local l="urn:xmpp:delay";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7354 local o=require"util.uuid".generate;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7355 local u=require"util.datetime".parse;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7356 local n=require"util.datetime".datetime;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7357 local i=require"util.dataforms".new;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7358 local r=require"util.rsm";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7359 local c={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7360 local m=i{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7361 {name="FORM_TYPE";type="hidden";value=e;};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7362 {name="with";type="jid-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7363 {name="start";type="text-single"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7364 {name="end";type="text-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7365 };
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7366 function a.plugins.archive(s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7367 function s:query_archive(d,a,s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7368 local i=o();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7369 local o=t.iq{type="set",to=d}
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7370 :tag("query",{xmlns=e,queryid=i});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7371 local t,d=tonumber(a["start"]),tonumber(a["end"]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7372 a["start"]=t and n(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7373 a["end"]=d and n(d);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7374 o:add_child(m:form(a,"submit"));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7375 o:add_child(r.generate(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7376 local a={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7377 local function n(o)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7378 local t=o:get_child("fin",e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7379 if t and t.attr.queryid==i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7380 local e=r.get(t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7381 for t,e in pairs(e or c)do a[t]=e;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7382 self:unhook("message",n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7383 s(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7384 return true
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7385 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7386 local e=o:get_child("result",e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7387 if e and e.attr.queryid==i then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7388 local t=e:get_child("forwarded",h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7389 t=t or o:get_child("forwarded",h);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7390 local o=e.attr.id;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7391 local e=t:get_child("delay",l);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7392 local e=e and u(e.attr.stamp)or nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7393 local t=t:get_child("message","jabber:client")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7394 a[#a+1]={id=o,stamp=e,message=t};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7395 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7396 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7397 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7398 self:hook("message",n,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7399 self:send_iq(o,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7400 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7401 self:warn(table.concat({e:get_error()}," "))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7402 self:unhook("message",n);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7403 s(false,e:get_error())
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7404 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7405 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7406 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7407 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7408 local i={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7409 always=true,[true]="always",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7410 never=false,[false]="never",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7411 roster="roster",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7412 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7413 local function h(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7414 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7415 local a=t.attr.default;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7416 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7417 e[false]=i[a];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7418 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7419 local a=t:get_child("always");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7420 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7421 for t in a:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7422 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7423 e[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7424 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7425 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7426 local t=t:get_child("never");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7427 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7428 for t in t:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7429 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7430 e[t]=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7431 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7432 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7433 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7434 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7435 local function n(o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7436 local a
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7437 a,o[false]=o[false],nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7438 if a~=nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7439 a=i[a];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7440 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7441 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
7442 local a=t.stanza("always");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7443 local e=t.stanza("never");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7444 for o,t in pairs(o)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7445 (t and a or e):tag("jid"):text(o):up();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7446 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7447 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
7448 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7449 function s:archive_prefs_get(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7450 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
7451 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7452 if e and e.attr.type=="result"and e.tags[1]then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7453 local t=h(e.tags[1]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7454 a(t,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7455 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7456 a(nil,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7457 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7458 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7459 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7460 function s:archive_prefs_set(a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7461 self:send_iq(t.iq{type="set"}:add_child(n(a)),e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7462 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7463 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7464 end)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7465 package.preload['util.http']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7466 local t,h=string.format,string.char;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7467 local r,s,i=pairs,ipairs,tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7468 local o,d=table.insert,table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7469 local function n(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7470 return e and(e:gsub("[^a-zA-Z0-9.~_-]",function(e)return t("%%%02x",e:byte());end));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7471 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7472 local function a(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7473 return e and(e:gsub("%%(%x%x)",function(e)return h(i(e,16));end));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7474 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7475 local function e(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7476 return e and(e:gsub("%W",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7477 if e~=" "then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7478 return t("%%%02x",e:byte());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7479 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7480 return"+";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7481 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7482 end));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7483 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7484 local function h(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7485 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7486 if t[1]then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7487 for i,t in s(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7488 o(a,e(t.name).."="..e(t.value));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7489 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7490 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7491 for t,i in r(t)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7492 o(a,e(t).."="..e(i));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7493 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7494 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7495 return d(a,"&");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7496 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7497 local function s(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7498 if not e:match("=")then return a(e);end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7499 local i={};
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7500 for t,e in e:gmatch("([^=&]*)=([^&]*)")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7501 t,e=t:gsub("%+","%%20"),e:gsub("%+","%%20");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7502 t,e=a(t),a(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7503 o(i,{name=t,value=e});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7504 i[t]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7505 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7506 return i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7507 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7508 local function t(e,t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7509 e=","..e:gsub("[ \t]",""):lower()..",";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7510 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
7511 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7512 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7513 urlencode=n,urldecode=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7514 formencode=h,formdecode=s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7515 contains_token=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7516 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7517 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7518 package.preload['net.http.parser']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7519 local c=tonumber;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7520 local a=assert;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7521 local g,u=table.insert,table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7522 local q=require"socket.url".parse;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7523 local t=require"util.http".urldecode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7524 local function k(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7525 e=t((e:gsub("//+","/")));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7526 if e:sub(1,1)~="/"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7527 e="/"..e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7528 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7529 local t=0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7530 for e in e:gmatch("([^/]+)/")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7531 if e==".."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7532 t=t-1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7533 elseif e~="."then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7534 t=t+1;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7535 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7536 if t<0 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7537 return nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7538 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7539 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7540 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7541 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7542 local v={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7543 function v.new(f,r,e,l)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7544 local m=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7545 if not e or e=="server"then m=false;else a(e=="client","Invalid parser type");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7546 local e,o,i={},0,true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7547 local v=c(l and l().body_size_limit)or 10*1024*1024;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7548 local p=c(l and l().buffer_size_limit)or v*2;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7549 local b,a,h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7550 local d=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7551 local n;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7552 local t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7553 local y;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7554 local s;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7555 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7556 feed=function(j,w)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7557 if s then return nil,"parse has failed";end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7558 if not w then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7559 if i then e,i=u(e),false;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7560 if d and m and not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7561 n.body=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7562 f(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7563 elseif e~=""then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7564 s=true;return r("unexpected-eof");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7565 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7566 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7567 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7568 if i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7569 g(e,w);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7570 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7571 e={e,w};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7572 i=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7573 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7574 o=o+#w;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7575 if o>p then s=true;return r("max-buffer-size-exceeded");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7576 while o>0 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7577 if d==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7578 if i then e,i=u(e),false;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7579 local f=e:find("\r\n\r\n",nil,true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7580 if not f then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7581 local w,h,u,i,g;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7582 local p;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7583 local a={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7584 for t in e:sub(1,f+1):gmatch("([^\r\n]+)\r\n")do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7585 if p then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7586 local e,t=t:match("^([^%s:]+): *(.*)$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7587 if not e then s=true;return r("invalid-header-line");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7588 e=e:lower();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7589 a[e]=a[e]and a[e]..","..t or t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7590 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7591 p=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7592 if m then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7593 u,i,g=t:match("^HTTP/(1%.[01]) (%d%d%d) (.*)$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7594 i=c(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7595 if not i then s=true;return r("invalid-status-line");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7596 y=not
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7597 ((l and l().method=="HEAD")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7598 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
7599 or(i>=100 and i<200));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7600 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7601 w,h,u=t:match("^(%w+) (%S+) HTTP/(1%.[01])$");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7602 if not w then s=true;return r("invalid-status-line");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7603 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7604 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7605 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7606 if not p then s=true;return r("invalid-status-line");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7607 b=y and a["transfer-encoding"]=="chunked";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7608 t=c(a["content-length"]);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7609 if t and t>v then s=true;return r("content-length-limit-exceeded");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7610 if m then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7611 if not y then t=0;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7612 n={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7613 code=i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7614 httpversion=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7615 headers=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7616 body=y and""or nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7617 responseversion=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7618 responseheaders=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7619 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7620 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7621 local e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7622 if h:byte()==47 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7623 local a,t=h:match("([^?]*).?(.*)");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7624 if t==""then t=nil;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7625 e={path=a,query=t};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7626 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7627 e=q(h);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7628 if not(e and e.path)then s=true;return r("invalid-url");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7629 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7630 h=k(e.path);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7631 a.host=e.host or a.host;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7632 t=t or 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7633 n={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7634 method=w;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7635 url=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7636 path=h;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7637 httpversion=u;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7638 headers=a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7639 body=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7640 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7641 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7642 e=e:sub(f+4);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7643 o=#e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7644 d=true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7645 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7646 if d then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7647 if m then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7648 if b then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7649 if h and o-h-2<a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7650 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7651 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7652 if i then e,i=u(e),false;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7653 if not e:find("\r\n",nil,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7654 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7655 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7656 if not a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7657 a,h=e:match("^(%x+)[^\r\n]*\r\n()");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7658 a=a and c(a,16);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7659 if not a then s=true;return r("invalid-chunk-size");end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7660 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7661 if a==0 and e:find("\r\n\r\n",h-2,true)then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7662 d,a=nil,nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7663 e=e:gsub("^.-\r\n\r\n","");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7664 f(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7665 elseif o-h-2>=a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7666 n.body=n.body..e:sub(h,h+(a-1));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7667 e=e:sub(h+a+2);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7668 o=o-(h+a+2-1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7669 a,h=nil,nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7670 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7671 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7672 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7673 elseif t and o>=t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7674 if i then e,i=u(e),false;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7675 if n.code==101 then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7676 n.body,e,o,i=e,{},0,true;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7677 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7678 n.body,e=e:sub(1,t),e:sub(t+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7679 o=#e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7680 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7681 d=nil;f(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7682 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7683 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7684 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7685 elseif o>=t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7686 if i then e,i=u(e),false;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7687 n.body,e=e:sub(1,t),e:sub(t+1);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7688 o=#e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7689 d=nil;f(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7690 else
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7691 break;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7692 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7693 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7694 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7695 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7696 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7697 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7698 return v;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7699 end)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7700 package.preload['net.http']=(function(...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7701 local z=require"util.encodings".base64.encode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7702 local m=require"socket.url"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7703 local h=require"net.http.parser".new;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7704 local u=require"util.http";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7705 local g=require"util.events";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7706 local b=pcall(require,"ssl");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7707 local k=require"net.server"
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7708 local i,o=table.insert,table.concat;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7709 local w=pairs;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7710 local v,l,p,s=
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7711 tonumber,tostring,xpcall,debug.traceback;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7712 local y=error
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7713 local d=require"util.logger".init("http");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7714 local e=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7715 local n={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7716 local function c(e)return(l(e):match("%x+$"));end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7717 local r={default_port=80,default_mode="*a"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7718 function r.onconnect(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7719 local e=n[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7720 local a={e.method or"GET"," ",e.path," HTTP/1.1\r\n"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7721 if e.query then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7722 i(a,4,"?"..e.query);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7723 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7724 t:write(o(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7725 local a={[2]=": ",[4]="\r\n"};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7726 for e,i in w(e.headers)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7727 a[1],a[3]=e,i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7728 t:write(o(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7729 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7730 t:write("\r\n");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7731 if e.body then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7732 t:write(e.body);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7733 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7734 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7735 function r.onincoming(t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7736 local e=n[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7737 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7738 d("warn","Received response from connection %s with no request attached!",l(t));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7739 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7740 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7741 if a and e.reader then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7742 e:reader(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7743 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7744 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7745 function r.ondisconnect(t,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7746 local e=n[t];
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7747 if e and e.conn then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7748 e:reader(nil,a or"closed");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7749 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7750 n[t]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7751 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7752 function r.ondetach(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7753 n[e]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7754 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7755 local function o(e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7756 if e.conn then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7757 e.conn=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7758 e.handler:close()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7759 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7760 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7761 local function x(e,i,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7762 if not e.parser then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7763 local function a(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7764 if e.callback then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7765 e.callback(t or"connection-closed",0,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7766 e.callback=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7767 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7768 o(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7769 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7770 if not i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7771 a(n);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7772 return;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7773 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7774 local function i(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7775 if e.callback then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7776 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
7777 e.callback=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7778 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7779 o(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7780 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7781 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7782 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7783 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7784 e.parser=h(i,a,"client",t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7785 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7786 e.parser:feed(i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7787 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7788 local function q(e)d("error","Traceback[http]: %s",s(l(e),2));end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7789 local function j(e,t,...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7790 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7791 d("error","Request '%s': error in callback: %s",e,l((...)));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7792 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7793 return...;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7794 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7795 local function f(o,a,t,h)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7796 local e=m.parse(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7797 e.url=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7798 if not(e and e.host)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7799 h("invalid-url",0,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7800 return nil,"invalid-url";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7802 if not e.path then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7803 e.path="/";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7804 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7805 e.id=t and t.id or c(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7806 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7807 local i={http=o,url=a,request=e,options=t,callback=h};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7808 local o=o.events.fire_event("pre-request",i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7809 if o then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7810 return o;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7811 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7812 e,a,t,h=i.request,i.url,i.options,i.callback;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7813 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7814 local m,s,c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7815 local f,i=e.host,e.port;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7816 local u=f;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7817 if(i=="80"and e.scheme=="http")
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7818 or(i=="443"and e.scheme=="https")then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7819 i=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7820 elseif i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7821 u=u..":"..i;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7822 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7823 s={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7824 ["Host"]=u;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7825 ["User-Agent"]="Prosody XMPP Server";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7826 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7827 if e.userinfo then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7828 s["Authorization"]="Basic "..z(e.userinfo);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7829 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7830 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7831 e.onlystatus=t.onlystatus;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7832 c=t.body;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7833 if c then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7834 m="POST";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7835 s["Content-Length"]=l(#c);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7836 s["Content-Type"]="application/x-www-form-urlencoded";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7837 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7838 if t.method then m=t.method;end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7839 if t.headers then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7840 for e,t in w(t.headers)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7841 s[e]=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7842 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7843 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7844 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7845 d("debug","Making %s %s request '%s' to %s",e.scheme:upper(),m or"GET",e.id,(t and t.suppress_url and u)or a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7846 e.method,e.headers,e.body=m,s,c;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7847 local s=e.scheme=="https";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7848 if s and not b then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7849 y("SSL not available, unable to contact https URL");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7850 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7851 local l=i and v(i)or(s and 443 or 80);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7852 local i=false;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7853 if s then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7854 i=t and t.sslctx or{mode="client",protocol="sslv23",options={"no_sslv2","no_sslv3"}};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7855 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7856 local i,t=k.addclient(f,l,r,"*a",i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7857 if not i then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7858 o.events.fire_event("request-connection-error",{http=o,request=e,url=a,err=t});
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7859 h(t,0,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7860 return nil,t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7861 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7862 e.handler,e.conn=i,t
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7863 e.write=function(...)return e.handler:write(...);end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7864 e.callback=function(i,t,n,s)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7865 do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7866 local e={http=o,url=a,request=e,response=n,content=i,code=t,callback=h};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7867 o.events.fire_event("response",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7868 i,t,n=e.content,e.code,e.response;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7869 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7870 d("debug","Request '%s': Calling callback, status %s",e.id,t or"---");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7871 return j(e.id,p(function()return h(i,t,s,n)end,q));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7872 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7873 e.reader=x;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7874 e.state="status";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7875 n[e.handler]=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7876 o.events.fire_event("request",{http=o,request=e,url=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7877 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7878 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7879 local function e(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7880 local e={
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7881 options=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7882 request=f;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7883 new=t and function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7884 return e(setmetatable(a,{__index=t}));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7885 end or e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7886 events=g.new();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7887 request=f;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7888 };
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7889 return e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7890 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7891 local t=e();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7892 return{
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7893 request=function(e,a,o)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7894 return t:request(e,a,o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7895 end;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7896 new=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7897 events=t.events;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7898 urlencode=u.urlencode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7899 urldecode=u.urldecode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7900 formencode=u.formencode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7901 formdecode=u.formdecode;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7902 };
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7903 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7904 package.preload['verse.bosh']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7905 local r=require"util.xmppstream".new;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7906 local h=require"util.stanza";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7907 require"net.httpclient_listener";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7908 local o=require"net.http";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7909 local e=setmetatable({},{__index=verse.stream_mt});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7910 e.__index=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7911 local s="http://etherx.jabber.org/streams";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7912 local n="http://jabber.org/protocol/httpbind";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7913 local i=5;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7914 function verse.new_bosh(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7915 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7916 bosh_conn_pool={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7917 bosh_waiting_requests={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7918 bosh_rid=math.random(1,999999);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7919 bosh_outgoing_buffer={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7920 bosh_url=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7921 conn={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7922 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7923 function t:reopen()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7924 self.bosh_need_restart=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7925 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7926 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7927 local t=verse.new(a,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7928 return setmetatable(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7929 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7930 function e:connect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7931 self:_send_session_request();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7932 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7933 function e:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7934 self:debug("Putting into BOSH send buffer: %s",tostring(e));
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7935 self.bosh_outgoing_buffer[#self.bosh_outgoing_buffer+1]=h.clone(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7936 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7937 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7938 function e:flush()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7939 if self.connected
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7940 and#self.bosh_waiting_requests<self.bosh_max_requests
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7941 and(#self.bosh_waiting_requests==0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7942 or#self.bosh_outgoing_buffer>0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7943 or self.bosh_need_restart)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7944 self:debug("Flushing...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7945 local e=self:_make_body();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7946 local t=self.bosh_outgoing_buffer;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7947 for o,a in ipairs(t)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7948 e:add_child(a);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7949 t[o]=nil;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7950 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7951 self:_make_request(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7952 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7953 self:debug("Decided not to flush.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7954 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7955 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7956 function e:_make_request(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7957 local e,t=o.request(self.bosh_url,{body=tostring(t)},function(o,e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7958 if e~=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7959 self.inactive_since=nil;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7960 return self:_handle_response(o,e,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7961 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7962 local e=os.time();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7963 if not self.inactive_since then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7964 self.inactive_since=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7965 elseif e-self.inactive_since>self.bosh_max_inactivity then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7966 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7967 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7968 self:debug("%d seconds left to reconnect, retrying in %d seconds...",
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7969 self.bosh_max_inactivity-(e-self.inactive_since),i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7970 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7971 timer.add_task(i,function()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7972 self:debug("Retrying request...");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7973 for e,t in ipairs(self.bosh_waiting_requests)do
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7974 if t==a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7975 table.remove(self.bosh_waiting_requests,e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7976 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7977 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7978 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
7979 self:_make_request(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7980 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7981 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7982 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7983 table.insert(self.bosh_waiting_requests,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7984 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7985 self:warn("Request failed instantly: %s",t);
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 function e:_disconnected()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7989 self.connected=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7990 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7991 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7992 function e:_send_session_request()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7993 local e=self:_make_body();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7994 e.attr.hold="1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7995 e.attr.wait="60";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7996 e.attr["xml:lang"]="en";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7997 e.attr.ver="1.6";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7998 e.attr.from=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7999 e.attr.to=self.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8000 e.attr.secure='true';
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8001 o.request(self.bosh_url,{body=tostring(e)},function(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8002 if t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8003 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8004 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8005 local e=self:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8006 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8007 self:warn("Invalid session creation response");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8008 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8009 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8010 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8011 self.bosh_sid=e.attr.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8012 self.bosh_wait=tonumber(e.attr.wait);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8013 self.bosh_hold=tonumber(e.attr.hold);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8014 self.bosh_max_inactivity=tonumber(e.attr.inactivity);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8015 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
8016 self.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8017 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8018 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8019 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8020 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8021 function e:_handle_response(t,a,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8022 if self.bosh_waiting_requests[1]~=e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8023 self:warn("Server replied to request that wasn't the oldest");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8024 for t,a in ipairs(self.bosh_waiting_requests)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8025 if a==e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8026 self.bosh_waiting_requests[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8027 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8028 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8029 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8030 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8031 table.remove(self.bosh_waiting_requests,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8032 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8033 local e=self:_parse_response(t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8034 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8035 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8036 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8037 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8038 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8039 function e:_handle_response_payload(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8040 local e=t.tags;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8041 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8042 local e=e[t];
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8043 if e.attr.xmlns==s then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8044 self:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8045 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8046 self:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8047 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8048 self:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8049 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8050 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8051 if t.attr.type=="terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8052 self:_disconnected({reason=t.attr.condition});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8053 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8054 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8055 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8056 stream_ns="http://jabber.org/protocol/httpbind",stream_tag="body",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8057 default_ns="jabber:client",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8058 streamopened=function(e,t)e.notopen=nil;e.payload=verse.stanza("body",t);return true;end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8059 handlestanza=function(t,e)t.payload:add_child(e);end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8060 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8061 function e:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8062 self:debug("Parsing response: %s",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8063 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8064 self:debug("%s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8065 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8066 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8067 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8068 local t={notopen=true,stream=self};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8069 local a=r(t,a);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8070 a:feed(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8071 return t.payload;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8072 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8073 function e:_make_body()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8074 self.bosh_rid=self.bosh_rid+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8075 local e=verse.stanza("body",{
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8076 xmlns=n;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8077 content="text/xml; charset=utf-8";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8078 sid=self.bosh_sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8079 rid=self.bosh_rid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8080 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8081 if self.bosh_need_restart then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8082 self.bosh_need_restart=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8083 e.attr.restart='true';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8084 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8085 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8086 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8087 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8088 package.preload['verse.client']=(function(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8089 local t=require"verse";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8090 local o=t.stream_mt;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8091 local h=require"util.jid".split;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8092 local d=require"net.adns";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8093 local e=require"lxp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8094 local a=require"util.stanza";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8095 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
8096 a.message,a.presence,a.iq,a.stanza,a.reply,a.error_reply;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8097 local r=require"util.xmppstream".new;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8098 local n="http://etherx.jabber.org/streams";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8099 local function s(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8100 return t.priority<e.priority or(t.priority==e.priority and t.weight>e.weight);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8101 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8102 local i={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8103 stream_ns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8104 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8105 default_ns="jabber:client"};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8106 function i.streamopened(e,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8107 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8108 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8109 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8110 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8111 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8112 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8113 function i.streamclosed(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8114 e.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8115 if not e.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8116 e:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8117 e.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8118 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8119 e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8120 return e:close("stream closed")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8121 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8122 function i.handlestanza(t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8123 if e.attr.xmlns==n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8124 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8125 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8126 return t:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8127 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8128 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8129 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8130 function i.error(a,t,e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8131 if a:event(t,e)==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8132 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8133 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
8134 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
8135 error(t.name..(e and": "..e or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8136 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8137 error(e and e.name or t or"unknown-error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8138 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8139 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8140 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8141 function o:reset()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8142 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8143 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8144 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8145 self.stream=r(self,i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8146 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8147 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8148 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8149 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8150 function o:connect_client(e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8151 self.jid,self.password=e,a;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8152 self.username,self.host,self.resource=h(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8153 self:add_plugin("tls");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8154 self:add_plugin("sasl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8155 self:add_plugin("bind");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8156 self:add_plugin("session");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8157 function self.data(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8158 local a,t=self.stream:feed(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8159 if a then return;end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8160 self:debug("Received invalid XML (%s) %d bytes: %s",tostring(t),#e,e:sub(1,300):gsub("[\r\n]+"," "));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8161 self:close("xml-not-well-formed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8162 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8163 self:hook("connected",function()self:reopen();end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8164 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
8165 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8166 self.tracked_iqs={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8167 self:hook("stanza",function(t)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8168 local e,a=t.attr.id,t.attr.type;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8169 if e and t.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[e]then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8170 self.tracked_iqs[e](t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8171 self.tracked_iqs[e]=nil;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8172 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8173 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8174 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8175 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8176 local a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8177 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
8178 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
8179 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8180 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8181 a=self:event("iq/"..o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8182 if not a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8183 a=self:event("iq",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8184 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8186 if a==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8187 self:send(t.error_reply(e,"cancel","service-unavailable"));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8188 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8189 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8190 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8191 a=self:event(e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8192 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8193 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8194 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8195 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8196 self:hook("outgoing",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8197 if e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8198 self:event("stanza-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8199 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8200 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8201 self:hook("stanza-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8202 if not e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8203 self:event(e.name.."-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8204 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8205 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8206 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8207 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8209 self:hook("session-success",e,-1)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8210 self:hook("bind-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8211 local t=self.close;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8212 function self:close(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8213 self.close=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8214 if not self.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8215 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8216 self.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8217 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8218 return self:close(e);
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
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8221 local function t()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8222 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
8223 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8224 if not(self.connect_host or self.connect_port)then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8225 d.lookup(function(a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8226 if a then
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8227 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8228 self.srv_hosts=e;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8229 for a,t in ipairs(a)do
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8230 table.insert(e,t.srv);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8231 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8232 table.sort(e,s);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8233 local a=e[1];
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8234 self.srv_choice=1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8235 if a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8236 self.connect_host,self.connect_port=a.target,a.port;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8237 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
8238 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8239 self:hook("disconnected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8240 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
8241 self.srv_choice=self.srv_choice+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8242 local e=e[self.srv_choice];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8243 self.connect_host,self.connect_port=e.target,e.port;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8244 t();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8245 return true;
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 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8248 self:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8249 self.srv_hosts=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8250 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8251 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8252 t();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8253 end,"_xmpp-client._tcp."..(self.host)..".","SRV");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8254 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8255 t();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8256 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8257 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8258 function o:reopen()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8259 self:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8260 self:send(a.stanza("stream:stream",{to=self.host,["xmlns:stream"]='http://etherx.jabber.org/streams',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8261 xmlns="jabber:client",version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8262 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8263 function o:send_iq(e,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8264 local t=self:new_id();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8265 self.tracked_iqs[t]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8266 e.attr.id=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8267 self:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8268 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8269 function o:new_id()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8270 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8271 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8272 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8273 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8274 package.preload['verse.component']=(function(...)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8275 local a=require"verse";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8276 local o=a.stream_mt;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8277 local d=require"util.jid".split;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8278 local e=require"lxp";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8279 local t=require"util.stanza";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8280 local r=require"util.sha1".sha1;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8281 a.message,a.presence,a.iq,a.stanza,a.reply,a.error_reply=
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8282 t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8283 local h=require"util.xmppstream".new;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8284 local s="http://etherx.jabber.org/streams";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8285 local i="jabber:component:accept";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8286 local n={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8287 stream_ns=s,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8288 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8289 default_ns=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8290 function n.streamopened(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8291 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8292 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8293 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8294 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8295 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8296 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8297 function n.streamclosed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8298 return e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8299 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8300 function n.handlestanza(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8301 if e.attr.xmlns==s then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8302 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8303 elseif e.attr.xmlns or e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8304 return t:event("stream/"..(e.attr.xmlns or i),e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8305 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8306 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8307 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8308 function o:reset()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8309 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8310 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8311 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8312 self.stream=h(self,n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8313 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8314 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8315 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8316 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8317 function o:connect_component(e,n)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8318 self.jid,self.password=e,n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8319 self.username,self.host,self.resource=d(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8320 function self.data(t,e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8321 local t,a=self.stream:feed(e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8322 if t then return;end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8323 o:debug("Received invalid XML (%s) %d bytes: %s",tostring(a),#e,e:sub(1,300):gsub("[\r\n]+"," "));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8324 o:close("xml-not-well-formed");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8325 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8326 self: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
8327 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8328 self.tracked_iqs={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8329 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8330 local t,a=e.attr.id,e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8331 if t and e.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8332 self.tracked_iqs[t](e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8333 self.tracked_iqs[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8334 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8335 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8336 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8337 self:hook("stanza",function(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8338 local t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8339 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
8340 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
8341 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8342 if o then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8343 t=self:event("iq/"..o,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8344 if not t then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8345 t=self:event("iq",e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8346 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8347 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8348 if t==nil then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8349 self:send(a.error_reply(e,"cancel","service-unavailable"));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8350 return true;
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 else
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8353 t=self:event(e.name,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8354 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8355 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8356 return t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8357 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8358 self:hook("opened",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8359 print(self.jid,self.stream_id,e.id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8360 local e=r(self.stream_id..n,true);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8361 self:send(t.stanza("handshake",{xmlns=i}):text(e));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8362 self:hook("stream/"..i,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8363 if e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8364 self:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8365 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8366 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8367 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8368 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8369 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8370 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8371 self:hook("authentication-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8372 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
8373 self:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8374 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8375 function o:reopen()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8376 self:reset();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8377 self:send(t.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
8378 xmlns=i,version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8379 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8380 function o:close(e)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8381 if not self.notopen then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8382 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8383 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8384 local t=self.conn.disconnect();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8385 self.conn:close();
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8386 t(conn,e);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8387 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8388 function o:send_iq(t,a)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8389 local e=self:new_id();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8390 self.tracked_iqs[e]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8391 t.attr.id=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8392 self:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8393 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8394 function o:new_id()
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8395 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8396 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8397 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8398 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8399 pcall(require,"luarocks.require");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8400 local h=require"socket";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8401 pcall(require,"ssl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8402 local a=require"net.server";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8403 local s=require"util.events";
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8404 local o=require"util.logger";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8405 local t={};
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8406 local e=t;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8407 t.server=a;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8408 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8409 t.__index=t;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8410 e.stream_mt=t;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8411 e.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8412 function e.init(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8413 for e=1,select("#",...)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8414 local a,t=pcall(require,"verse."..select(e,...));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8415 if not a then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8416 error("Verse connection module not found: verse."..select(e,...)..t);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8417 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8418 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8419 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8420 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8421 local i=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8422 function e.new(o,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8423 local t=setmetatable(a or{},t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8424 i=i+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8425 t.id=tostring(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8426 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
8427 t.events=s.new();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8428 t.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8429 t.verse=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8430 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8431 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8432 e.add_task=require"util.timer".add_task;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8433 e.logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8434 e.new_logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8435 e.log=e.logger("verse");
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8436 local function n(a,...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8437 local e,t,o=0,{...},select('#',...);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8438 return(a:gsub("%%(.)",function(a)if e<=o then e=e+1;return tostring(t[e]);end end));
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 e.set_log_handler(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8441 t=t or{"debug","info","warn","error"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8442 o.reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8443 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
8444 local o=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8445 function e(t,a,e)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8446 o:write(t,"\t",a,"\t",e,"\n");
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8447 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8448 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8449 if e then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8450 local function i(o,a,t,...)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8451 return e(o,a,n(t,...));
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8452 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8453 for t,e in ipairs(t)do
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8454 o.add_level_sink(e,i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8455 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8456 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8457 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8458 function e._default_log_handler(o,a,t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8459 return io.stderr:write(o,"\t",a,"\t",t,"\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8460 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8461 e.set_log_handler(e._default_log_handler,{"error"});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8462 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8463 e.log("error","Error: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8464 e.log("error","Traceback: %s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8465 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8466 function e.set_error_handler(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8467 o=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8468 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8469 function e.loop()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8470 return xpcall(a.loop,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8471 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8472 function e.step()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8473 return xpcall(a.step,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8474 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8475 function e.quit()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8476 return a.setquitting(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8477 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8478 function t:listen(t,o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8479 t=t or"localhost";
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8480 o=o or 0;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8481 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
8482 if e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8483 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
8484 self.server=e;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8485 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8486 return e,a;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8487 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8488 function t:connect(o,i)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8489 o=o or"localhost";
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8490 i=tonumber(i)or 5222;
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8491 local n=h.tcp()
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8492 n:settimeout(0);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8493 n:setoption("keepalive",true);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8494 local s,t=n:connect(o,i);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8495 if not s and t~="timeout"then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8496 self:warn("connect() to %s:%d failed: %s",o,i,t);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8497 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
8498 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8499 local e=a.wrapclient(n,o,i,e.new_listener(self),"*a");
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8500 if not e then
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8501 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
8502 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
8503 end
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8504 self:set_conn(e);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8505 return true;
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 function t:set_conn(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8508 self.conn=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8509 self.send=function(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8510 self:event("outgoing",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8511 e=tostring(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8512 self:event("outgoing-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8513 return t:write(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8514 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8515 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8516 function t:close(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8517 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8518 e.log("error","Attempt to close disconnected connection - possibly a bug");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8519 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8520 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8521 local e=self.conn.disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8522 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8523 e(self.conn,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8524 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8525 function t:debug(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8526 return self.logger("debug",...);
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 t:info(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8529 return self.logger("info",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8530 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8531 function t:warn(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8532 return self.logger("warn",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8533 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8534 function t:error(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8535 return self.logger("error",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8537 function t:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8538 self:debug("Firing event: "..tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8539 return self.events.fire_event(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8540 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8541 function t:hook(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8542 return self.events.add_handler(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8543 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8544 function t:unhook(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8545 return self.events.remove_handler(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8546 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8547 function e.eventable(e)
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8548 e.events=s.new();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8549 e.hook,e.unhook=t.hook,t.unhook;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8550 local t=e.events.fire_event;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8551 function e:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8552 return t(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8553 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8554 return e;
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 t:add_plugin(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8557 if self.plugins[t]then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8558 if require("verse.plugins."..t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8559 local a,e=e.plugins[t](self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8560 if a~=false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8561 self:debug("Loaded %s plugin",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8562 self.plugins[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8563 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8564 self:warn("Failed to load %s plugin: %s",t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8565 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8566 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8567 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8568 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8569 function e.new_listener(t)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8570 local a={};
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8571 function a.onconnect(o)
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8572 if t.server then
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8573 local a=e.new();
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8574 o:setlistener(e.new_listener(a));
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8575 a:set_conn(o);
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8576 t:event("connected",{client=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8577 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8578 t.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8579 t:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8580 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8581 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8582 function a.onincoming(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8583 t:event("incoming-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8584 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8585 function a.ondisconnect(e,a)
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8586 if e~=t.conn then return end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8587 t.connected=false;
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
8588 t:event("disconnected",{reason=a});
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8589 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8590 function a.ondrain(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8591 t:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8592 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8593 function a.onstatus(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8594 t:event("status",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8595 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8596 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8597 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8598 return e;

mercurial