Tue, 10 Jul 2018 11:08:59 +0100
Add tests for stanzacmp
12 | 1 | package.preload['util.encodings']=(function(...) |
2 | local function e() | |
3 | error("Function not implemented"); | |
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 | 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 | 10 | end) |
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 | 61 | end) |
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 | 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 | 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 | 70 | local e=t.band |
71 | local y=t.bor | |
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 | 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 | 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 | 81 | local t="" |
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 | 90 | end |
91 | return t | |
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 | 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 | 104 | end |
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 | 108 | end |
109 | return t..n | |
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 | 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 | 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 | 120 | end |
121 | end | |
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 | 169 | if t then |
170 | return e; | |
171 | else | |
172 | return(e:gsub("..",function(e) | |
173 | return string.char(tonumber(e,16)); | |
174 | end)); | |
175 | end | |
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 | 178 | return _G.sha1; |
179 | end) | |
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 | 182 | local e="http://jabber.org/protocol/commands"; |
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 | 187 | if t then e.attr.sessionid=t;end |
188 | if a then e.attr.action=a;end | |
189 | return e; | |
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 | 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 | 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 | 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 | 215 | return true; |
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 | 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 | 247 | return true; |
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 | 250 | end) |
251 | package.preload['util.stanza']=(function(...) | |
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 | 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 | 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 | 270 | local t,e=pcall(require,"util.termcolours"); |
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 | 282 | local t={name=t,attr=a or{},tags={}}; |
283 | return m(t,e); | |
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 | 288 | function e:query(e) |
289 | return self:tag("query",{xmlns=e}); | |
290 | end | |
291 | function e:body(t,e) | |
292 | return self:tag("body",e):text(t); | |
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 | 296 | local e=self.last_add; |
297 | if not e then e={};self.last_add=e;end | |
298 | (e[#e]or self):add_direct_child(a); | |
299 | t(e,a); | |
300 | return self; | |
301 | end | |
302 | function e:text(t) | |
303 | local e=self.last_add; | |
304 | (e and e[#e]or self):add_direct_child(t); | |
305 | return self; | |
306 | end | |
307 | function e:up() | |
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 | 310 | return self; |
311 | end | |
312 | function e:reset() | |
313 | self.last_add=nil; | |
314 | return self; | |
315 | end | |
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 | 318 | t(self.tags,e); |
319 | end | |
320 | t(self,e); | |
321 | end | |
322 | function e:add_child(t) | |
323 | local e=self.last_add; | |
324 | (e and e[#e]or self):add_direct_child(t); | |
325 | return self; | |
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 | 332 | return e; |
333 | end | |
334 | end | |
335 | end | |
336 | function e:get_child_text(t,e) | |
337 | local e=self:get_child(t,e); | |
338 | if e then | |
339 | return e:get_text(); | |
340 | end | |
341 | return nil; | |
342 | end | |
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 | 345 | if e.name==t then return e;end |
346 | end | |
347 | end | |
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 | 350 | if e.attr.xmlns==t then return e;end |
351 | end | |
352 | end | |
353 | function e:children() | |
354 | local e=0; | |
355 | return function(t) | |
356 | e=e+1 | |
357 | return t[e]; | |
358 | end,self,e; | |
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 | 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 | 371 | end |
372 | end | |
373 | end; | |
374 | end | |
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 | 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 | 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 | 392 | end |
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 | 395 | t=t+1; |
396 | end | |
397 | return self; | |
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={["'"]="'",["\""]=""",["<"]="<",[">"]=">",["&"]="&"}; |
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 | 425 | local s=o.name |
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 | 434 | end |
435 | end | |
436 | local i=#o; | |
437 | if i==0 then | |
438 | t(e,"/>"); | |
439 | else | |
440 | t(e,">"); | |
441 | for i=1,i do | |
442 | local i=o[i]; | |
443 | if i.name then | |
444 | h(i,e,h,a,o.attr.xmlns); | |
445 | else | |
446 | t(e,a(i)); | |
447 | end | |
448 | end | |
449 | t(e,"</"..s..">"); | |
450 | end | |
451 | end | |
452 | function e.__tostring(t) | |
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 | 463 | end |
464 | function e.get_text(e) | |
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 | 473 | return nil,nil,nil; |
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 | 484 | break; |
485 | end | |
486 | end | |
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 | 507 | if a then |
508 | local s=a.attr; | |
509 | for e=1,#s do s[e]=nil;end | |
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 | 515 | s[e]=nil; |
516 | end | |
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 | 520 | end |
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 | 525 | end |
526 | end | |
527 | if not a.tags then | |
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 | 532 | end |
533 | end | |
534 | a.tags=e; | |
535 | end | |
536 | end | |
537 | return a; | |
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 | 543 | for e=1,#a do |
544 | local e=a[e]; | |
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 | 548 | end |
549 | t(o,e); | |
550 | end | |
551 | return m(o,e); | |
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 | 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 | 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 | 574 | return e; |
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 | 594 | end |
595 | end | |
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 | 608 | end |
609 | else | |
610 | e.pretty_print=e.__tostring; | |
611 | e.pretty_top_tag=e.top_tag; | |
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 | 628 | end) |
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 | 637 | local i={}; |
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 | 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 | 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 | 659 | end |
660 | e={}; | |
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 | 674 | end |
675 | end | |
676 | return e; | |
677 | end); | |
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 | 690 | end |
691 | end | |
692 | ,a); | |
693 | end | |
694 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
695 | return{ |
12 | 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 | 698 | end) |
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 | 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 | 716 | reset=0;bright=1,dim=2,underscore=4,blink=5,reverse=7,hidden=8; |
717 | black=30;red=31;green=32;yellow=33;blue=34;magenta=35;cyan=36;white=37; | |
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; | |
719 | bold=1,dark=2,underline=4,underlined=4,normal=0; | |
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 | 723 | ["1"]=7+8, |
724 | ["1;33"]=2+4+8, | |
725 | ["1;31"]=4+8 | |
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 | 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 | 739 | else |
740 | return t; | |
741 | end | |
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 | 787 | end |
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 | 798 | e=e or"0"; |
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 | 801 | a=e; |
802 | end | |
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 | 825 | end) |
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 | 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 | 836 | end |
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 | 845 | end) |
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 | 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 | 856 | local e={ |
857 | get=function(t,...) | |
858 | local a=e('#',...); | |
859 | for a=1,a do | |
860 | t=t[e(a,...)]; | |
861 | if t==nil then break;end | |
862 | end | |
863 | return t; | |
864 | end; | |
865 | set=function(a,...) | |
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 | 868 | local t,n; |
869 | for i=1,i-2 do | |
870 | local i=e(i,...) | |
871 | local e=a[i] | |
872 | if o==nil then | |
873 | if e==nil then | |
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 | 876 | t=nil;n=nil; |
877 | elseif t==nil then | |
878 | t=a;n=i; | |
879 | end | |
880 | elseif e==nil then | |
881 | e={}; | |
882 | a[i]=e; | |
883 | end | |
884 | a=e | |
885 | end | |
886 | if o==nil and t then | |
887 | t[n]=nil; | |
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 | 890 | return o; |
891 | end | |
892 | end; | |
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 | 900 | return(e-(e%256))/256; |
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 | 903 | local t={}; |
904 | for o,e in o(e)do | |
905 | t[o]=e; | |
906 | t[e]=e; | |
907 | t[a.lower(e)]=e; | |
908 | end | |
909 | return t; | |
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 | 912 | local e={}; |
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 | 915 | e[o]=t; |
916 | e[i]=t; | |
917 | e[a.lower(i)]=t; | |
918 | end | |
919 | return e; | |
920 | end | |
921 | t.types={ | |
922 | 'A','NS','MD','MF','CNAME','SOA','MB','MG','MR','NULL','WKS', | |
923 | 'PTR','HINFO','MINFO','MX','TXT', | |
924 | [28]='AAAA',[29]='LOC',[33]='SRV', | |
925 | [252]='AXFR',[253]='MAILB',[254]='MAILA',[255]='*'}; | |
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 | 932 | if a.byte(e,-1)~=46 then e=e..'.';end |
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 | 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 | 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 | 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 | 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 | 950 | end |
951 | end | |
952 | end | |
953 | local e={}; | |
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 | 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 | 959 | return"<UNKNOWN RDATA TYPE>"; |
960 | end | |
961 | return e; | |
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 | 964 | LOC=e.LOC_tostring; |
965 | MX=function(e) | |
966 | return a.format('%2i %s',e.pref,e.mx); | |
967 | end; | |
968 | SRV=function(e) | |
969 | local e=e.srv; | |
970 | return a.format('%5d %5d %5d %s',e.priority,e.weight,e.port,e.target); | |
971 | end; | |
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 | 976 | return a.format('%2s %-5s %6i %-28s %s',e.class,e.type,e.ttl,e.name,t); |
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 | 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 | 983 | end |
984 | return n.concat(e); | |
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 | 999 | end |
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 | 1003 | return t.random(...); |
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 | 1006 | e=e or{}; |
1007 | e.id=e.id or t.random(0,65535); | |
1008 | e.rd=e.rd or 1; | |
1009 | e.tc=e.tc or 0; | |
1010 | e.aa=e.aa or 0; | |
1011 | e.opcode=e.opcode or 0; | |
1012 | e.qr=e.qr or 0; | |
1013 | e.rcode=e.rcode or 0; | |
1014 | e.z=e.z or 0; | |
1015 | e.ra=e.ra or 0; | |
1016 | e.qdcount=e.qdcount or 1; | |
1017 | e.ancount=e.ancount or 0; | |
1018 | e.nscount=e.nscount or 0; | |
1019 | e.arcount=e.arcount or 0; | |
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 | 1022 | e.rd+2*e.tc+4*e.aa+8*e.opcode+128*e.qr, |
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 | 1028 | ); |
1029 | return t,e.id; | |
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 | 1032 | local e={}; |
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 | 1038 | return n.concat(e); |
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 | 1045 | end |
1046 | function e:byte(e) | |
1047 | e=e or 1; | |
1048 | local t=self.offset; | |
1049 | local o=t+e-1; | |
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 | 1052 | end |
1053 | self.offset=t+e; | |
1054 | return a.byte(self.packet,t,o); | |
1055 | end | |
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 | 1059 | end |
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 | 1063 | end |
1064 | function e:sub(e) | |
1065 | e=e or 1; | |
1066 | local t=a.sub(self.packet,self.offset,self.offset+e-1); | |
1067 | self.offset=self.offset+e; | |
1068 | return t; | |
1069 | end | |
1070 | function e:header(t) | |
1071 | local e=self:word(); | |
1072 | if not self.active[e]and not t then return nil;end | |
1073 | local e={id=e}; | |
1074 | local t,a=self:byte(2); | |
1075 | e.rd=t%2; | |
1076 | e.tc=t/2%2; | |
1077 | e.aa=t/4%2; | |
1078 | e.opcode=t/8%16; | |
1079 | e.qr=t/128; | |
1080 | e.rcode=a%16; | |
1081 | e.z=a/16%8; | |
1082 | e.ra=a/128; | |
1083 | e.qdcount=self:word(); | |
1084 | e.ancount=self:word(); | |
1085 | e.nscount=self:word(); | |
1086 | e.arcount=self:word(); | |
1087 | for a,t in o(e)do e[a]=t-t%1;end | |
1088 | return e; | |
1089 | end | |
1090 | function e:name() | |
1091 | local t,a=nil,0; | |
1092 | local e=self:byte(); | |
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 | 1095 | while e>0 do |
1096 | if e>=192 then | |
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 | 1099 | local e=((e-192)*256)+self:byte(); |
1100 | t=t or self.offset; | |
1101 | self.offset=e+1; | |
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 | 1104 | end |
1105 | e=self:byte(); | |
1106 | end | |
1107 | self.offset=t or self.offset; | |
1108 | return n.concat(o); | |
1109 | end | |
1110 | function e:question() | |
1111 | local e={}; | |
1112 | e.name=self:name(); | |
1113 | e.type=t.type[self:word()]; | |
1114 | e.class=t.class[self:word()]; | |
1115 | return e; | |
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 | 1120 | end |
1121 | function e:AAAA(a) | |
1122 | local e={}; | |
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 | 1126 | end |
1127 | e=n.concat(e,":"):gsub("%f[%x]0+(%x)","%1"); | |
1128 | local t={}; | |
1129 | for e in e:gmatch(":[0:]+:")do | |
1130 | n.insert(t,e) | |
1131 | end | |
1132 | if#t==0 then | |
1133 | a.aaaa=e; | |
1134 | return | |
1135 | elseif#t>1 then | |
1136 | n.sort(t,function(e,t)return#e>#t end); | |
1137 | end | |
1138 | a.aaaa=e:gsub(t[1],"::",1):gsub("^0::","::"):gsub("::0$","::"); | |
1139 | end | |
1140 | function e:CNAME(e) | |
1141 | e.cname=self:name(); | |
1142 | end | |
1143 | function e:MX(e) | |
1144 | e.pref=self:word(); | |
1145 | e.mx=self:name(); | |
1146 | end | |
1147 | function e:LOC_nibble_power() | |
1148 | local e=self:byte(); | |
1149 | return((e-(e%16))/16)*(10^(e%16)); | |
1150 | end | |
1151 | function e:LOC(e) | |
1152 | e.version=self:byte(); | |
1153 | if e.version==0 then | |
1154 | e.loc=e.loc or{}; | |
1155 | e.loc.size=self:LOC_nibble_power(); | |
1156 | e.loc.horiz_pre=self:LOC_nibble_power(); | |
1157 | e.loc.vert_pre=self:LOC_nibble_power(); | |
1158 | e.loc.latitude=self:dword(); | |
1159 | e.loc.longitude=self:dword(); | |
1160 | e.loc.altitude=self:dword(); | |
1161 | end | |
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 | 1164 | e=e-2147483648; |
1165 | if e<0 then i=t;e=-e;end | |
1166 | local n,t,o; | |
1167 | o=e%6e4; | |
1168 | e=(e-o)/6e4; | |
1169 | t=e%60; | |
1170 | n=(e-t)/60; | |
1171 | return a.format('%3d %2d %2.3f %s',n,t,o/1e3,i); | |
1172 | end | |
1173 | function e.LOC_tostring(e) | |
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 | 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 | 1179 | (e.loc.altitude-1e7)/100, |
1180 | e.loc.size/100, | |
1181 | e.loc.horiz_pre/100, | |
1182 | e.loc.vert_pre/100 | |
1183 | )); | |
1184 | return n.concat(t); | |
1185 | end | |
1186 | function e:NS(e) | |
1187 | e.ns=self:name(); | |
1188 | end | |
1189 | function e:SOA(e) | |
1190 | end | |
1191 | function e:SRV(e) | |
1192 | e.srv={}; | |
1193 | e.srv.priority=self:word(); | |
1194 | e.srv.weight=self:word(); | |
1195 | e.srv.port=self:word(); | |
1196 | e.srv.target=self:name(); | |
1197 | end | |
1198 | function e:PTR(e) | |
1199 | e.ptr=self:name(); | |
1200 | end | |
1201 | function e:TXT(e) | |
1202 | e.txt=self:sub(self:byte()); | |
1203 | end | |
1204 | function e:rr() | |
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 | 1207 | e.name=self:name(self); |
1208 | e.type=t.type[self:word()]or e.type; | |
1209 | e.class=t.class[self:word()]or e.class; | |
1210 | e.ttl=65536*self:word()+self:word(); | |
1211 | e.rdlength=self:word(); | |
1212 | if e.ttl<=0 then | |
1213 | e.tod=self.time+30; | |
1214 | else | |
1215 | e.tod=self.time+e.ttl; | |
1216 | end | |
1217 | local a=self.offset; | |
1218 | local t=self[t.type[e.type]]; | |
1219 | if t then t(self,e);end | |
1220 | self.offset=a; | |
1221 | e.rdata=self:sub(e.rdlength); | |
1222 | return e; | |
1223 | end | |
1224 | function e:rrs(t) | |
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 | 1227 | return e; |
1228 | end | |
1229 | function e:decode(t,o) | |
1230 | self.packet,self.offset=t,1; | |
1231 | local t=self:header(o); | |
1232 | if not t then return nil;end | |
1233 | local t={header=t}; | |
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 | 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 | 1240 | if not o then |
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 | 1243 | return nil; |
1244 | end | |
1245 | end | |
1246 | t.answer=self:rrs(t.header.ancount); | |
1247 | t.authority=self:rrs(t.header.nscount); | |
1248 | t.additional=self:rrs(t.header.arcount); | |
1249 | return t; | |
1250 | end | |
1251 | e.delays={1,3}; | |
1252 | function e:addnameserver(e) | |
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 | 1255 | end |
1256 | function e:setnameserver(e) | |
1257 | self.server={}; | |
1258 | self:addnameserver(e); | |
1259 | end | |
1260 | function e:adddefaultnameservers() | |
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 | 1264 | self:addnameserver(e); |
1265 | end | |
1266 | end | |
1267 | if not self.server or#self.server==0 then | |
1268 | self:addnameserver("208.67.222.222"); | |
1269 | self:addnameserver("208.67.220.220"); | |
1270 | end | |
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 | 1273 | if e then |
1274 | for e in e:lines()do | |
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 | 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 | 1282 | end |
1283 | end | |
1284 | end | |
1285 | if not self.server or#self.server==0 then | |
1286 | self:addnameserver("127.0.0.1"); | |
1287 | end | |
1288 | end | |
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 | 1291 | self.socket=self.socket or{}; |
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 | 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 | 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 | 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 | 1313 | return e; |
1314 | end | |
1315 | function e:voidsocket(e) | |
1316 | if self.socket[e]then | |
1317 | self.socketset[self.socket[e]]=nil; | |
1318 | self.socket[e]=nil; | |
1319 | elseif self.socketset[e]then | |
1320 | self.socket[self.socketset[e]]=nil; | |
1321 | self.socketset[e]=nil; | |
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 | 1324 | end |
1325 | function e:socket_wrapper_set(e) | |
1326 | self.socket_wrapper=e; | |
1327 | end | |
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 | 1330 | self.socket[t]=nil; |
1331 | self.socketset[e]=nil; | |
1332 | e:close(); | |
1333 | end | |
1334 | end | |
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 | 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 | 1349 | if t=='MX'then self.unsorted[a]=true;end |
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 | 1365 | return nil; |
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 | 1368 | return e; |
1369 | end | |
1370 | function e:purge(e) | |
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 | 1373 | for t,e in o(self.cache or{})do |
1374 | for t,e in o(e)do | |
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 | 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 | 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 | 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 | 1397 | server=self.best_server, |
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 | 1400 | }; |
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 | 1403 | local o,h=self:getsocket(i.server) |
1404 | if not o then | |
1405 | return nil,h; | |
1406 | end | |
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 | 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 | 1417 | s=s+1; |
1418 | self:servfail(o); | |
1419 | i.server=self.best_server; | |
1420 | o,h=self:getsocket(i.server); | |
1421 | if o then | |
1422 | o:send(i.packet); | |
1423 | return self.timeout; | |
1424 | end | |
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 | 1427 | end |
1428 | end) | |
1429 | end | |
1430 | return true; | |
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 | 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 | 1439 | e.server=e.server+1 |
1440 | if e.server>#self.server then | |
1441 | e.server=1; | |
1442 | end | |
1443 | e.retries=(e.retries or 0)+1; | |
1444 | if e.retries>=#self.server then | |
1445 | a[o]=nil; | |
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 | 1448 | if t then t:send(e.packet);end |
1449 | end | |
1450 | end | |
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 | 1457 | self.best_server=self.best_server+1; |
1458 | if self.best_server>#self.server then | |
1459 | self.best_server=1; | |
1460 | end | |
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 | 1463 | end |
1464 | function e:settimeout(e) | |
1465 | self.timeout=e; | |
1466 | end | |
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 | 1469 | t=t or self.socket; |
1470 | local e; | |
1471 | for a,t in o(t)do | |
1472 | if self.socketset[t]then | |
1473 | local t=t:receive(); | |
1474 | if t then | |
1475 | e=self:decode(t); | |
1476 | if e and self.active[e.header.id] | |
1477 | and self.active[e.header.id][e.question.raw]then | |
1478 | for a,t in o(e.answer)do | |
1479 | if t.name:sub(-#e.question[1].name,-1)==e.question[1].name then | |
1480 | self:remember(t,e.question[1].type) | |
1481 | end | |
1482 | end | |
1483 | local t=self.active[e.header.id]; | |
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 | 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 | 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 | 1494 | end |
1495 | end | |
1496 | end | |
1497 | end | |
1498 | end | |
1499 | return e; | |
1500 | end | |
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 | 1503 | local e=self:decode(e,t); |
1504 | if e and self.active[e.header.id] | |
1505 | and self.active[e.header.id][e.question.raw]then | |
1506 | for a,t in o(e.answer)do | |
1507 | self:remember(t,e.question[1].type); | |
1508 | end | |
1509 | local t=self.active[e.header.id]; | |
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 | 1513 | local e=e.question[1]; |
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 | 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 | 1521 | end |
1522 | end | |
1523 | end | |
1524 | return e; | |
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 | 1533 | end |
1534 | end | |
1535 | function e:pulse() | |
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 | 1541 | if self.time>=e.retry then |
1542 | e.server=e.server+1; | |
1543 | if e.server>#self.server then | |
1544 | e.server=1; | |
1545 | e.delay=e.delay+1; | |
1546 | end | |
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 | 1551 | else |
1552 | local t=self.socket[e.server]; | |
1553 | if t then t:send(e.packet);end | |
1554 | e.retry=self.time+self.delays[e.delay]; | |
1555 | end | |
1556 | end | |
1557 | end | |
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 | 1560 | return nil; |
1561 | end | |
1562 | function e:lookup(o,a,t) | |
1563 | self:query(o,a,t) | |
1564 | while self:pulse()do | |
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 | 1570 | end |
1571 | return self:peek(o,a,t); | |
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 | 1575 | end |
1576 | function e:tohostname(e) | |
1577 | return t.lookup(e:gsub("(%d+)%.(%d+)%.(%d+)%.(%d+)","%4.%3.%2.%1.in-addr.arpa."),"PTR"); | |
1578 | end | |
1579 | local i={ | |
1580 | qr={[0]='query','response'}, | |
1581 | opcode={[0]='query','inverse query','server status request'}, | |
1582 | aa={[0]='non-authoritative','authoritative'}, | |
1583 | tc={[0]='complete','truncated'}, | |
1584 | rd={[0]='recursion not desired','recursion desired'}, | |
1585 | ra={[0]='recursion not available','recursion available'}, | |
1586 | z={[0]='(reserved)'}, | |
1587 | rcode={[0]='no error','format error','server failure','name error','not implemented'}, | |
1588 | type=t.type, | |
1589 | class=t.class | |
1590 | }; | |
1591 | local function n(t,e) | |
1592 | return(i[e]and i[e][t[e]])or''; | |
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 | 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 | 1603 | end |
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 | 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 | 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 | 1616 | end |
1617 | end | |
1618 | end | |
1619 | end | |
1620 | end | |
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 | 1626 | return t; |
1627 | end | |
1628 | local e=t.resolver(); | |
1629 | t._resolver=e; | |
1630 | function t.lookup(...) | |
1631 | return e:lookup(...); | |
1632 | end | |
1633 | function t.tohostname(...) | |
1634 | return e:tohostname(...); | |
1635 | end | |
1636 | function t.purge(...) | |
1637 | return e:purge(...); | |
1638 | end | |
1639 | function t.peek(...) | |
1640 | return e:peek(...); | |
1641 | end | |
1642 | function t.query(...) | |
1643 | return e:query(...); | |
1644 | end | |
1645 | function t.feed(...) | |
1646 | return e:feed(...); | |
1647 | end | |
1648 | function t.cancel(...) | |
1649 | return e:cancel(...); | |
1650 | end | |
1651 | function t.settimeout(...) | |
1652 | return e:settimeout(...); | |
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 | 1657 | function t.socket_wrapper_set(...) |
1658 | return e:socket_wrapper_set(...); | |
1659 | end | |
1660 | return t; | |
1661 | end) | |
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 | 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 | 1671 | if i then |
1672 | e("debug","Records for %s already cached, using those...",t); | |
1673 | d(i); | |
1674 | return; | |
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 | 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 | 1681 | end |
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 | 1684 | else |
1685 | e("error","Error sending DNS query: %s",i); | |
1686 | n,i=l(d,nil,i); | |
1687 | end | |
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 | 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 | 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 | 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 | 1710 | local t=i.server; |
1711 | if i.socketset[o]==i.best_server and i.best_server==#t then | |
1712 | e("error","Exhausted all %d configured DNS servers, next lookup will try %s again",#t,t[1]); | |
1713 | end | |
1714 | i:servfail(o); | |
1715 | end | |
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 | 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 | 1720 | end |
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 | 1728 | end |
1729 | return t; | |
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 | 1737 | end) |
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 | 1740 | return _G[e] |
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 | 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 | 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 | 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 | 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 | 1794 | local a |
1795 | local o | |
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 | 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 | 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 | 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 | 1823 | a=0 |
1824 | o=0 | |
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 | 1850 | local e={} |
1851 | e.shutdown=function()end | |
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 | 1854 | end |
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 | 1857 | end |
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 | 1863 | end |
1864 | e.close=function() | |
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 | 1870 | e=nil |
1871 | t=nil | |
1872 | i"server.lua: closed server handler and removed sockets from list" | |
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 | 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 | 1901 | end |
1902 | e.serverport=function() | |
1903 | return u | |
1904 | end | |
1905 | e.socket=function() | |
1906 | return t | |
1907 | end | |
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 | 1912 | i("server.lua: refused new client connection: server full") |
1913 | return false | |
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 | 1916 | if t then |
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 | 1919 | if t then |
1920 | return false | |
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 | 1926 | end |
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 | 1932 | return false |
1933 | end | |
1934 | end | |
1935 | return e | |
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 | 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 | 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 | 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 | 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 | 1969 | local e=p |
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 | 1972 | end |
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 | 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 | 1987 | end |
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 | 1990 | end |
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 | 1993 | end |
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 | 1996 | end |
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 | 1999 | end |
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 | 2002 | end |
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 | 2005 | end |
2006 | e.setoption=function(i,a,o) | |
2007 | if t.setoption then | |
2008 | return t:setoption(a,o); | |
2009 | end | |
2010 | return false,"setoption not implemented"; | |
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 | 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 | 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 | 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 | 2026 | if e then |
2027 | e.write=nil | |
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 | 2030 | return false |
2031 | end | |
2032 | end | |
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 | 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 | 2038 | t=nil |
2039 | else | |
2040 | i"server.lua: socket already closed" | |
2041 | end | |
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 | 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 | 2054 | end |
2055 | i"server.lua: closed client handler and removed socket from list" | |
2056 | return true | |
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 | 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 | 2063 | end |
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 | 2066 | end |
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 | 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 | 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 | 2085 | end |
2086 | return true | |
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 | 2089 | e.bufferqueue=function(t) |
2090 | return p | |
2091 | end | |
2092 | e.socket=function(a) | |
2093 | return t | |
2094 | end | |
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 | 2098 | end |
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 | 2107 | end |
2108 | e.lock_read=function(i,o) | |
2109 | if o==true then | |
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 | 2112 | b[e]=nil |
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 | 2115 | end |
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 | 2124 | end |
2125 | e.pause=function(t) | |
2126 | return t:lock_read(true); | |
2127 | end | |
2128 | e.resume=function(t) | |
2129 | return t:lock_read(false); | |
2130 | end | |
2131 | e.lock=function(i,a) | |
2132 | e.lock_read(a) | |
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 | 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 | 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 | 2140 | end |
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 | 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 | 2157 | return false |
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 | 2168 | return false |
2169 | end | |
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 | 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 | 2184 | end |
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 | 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 | 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 | 2202 | return true |
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 | 2207 | return false |
2208 | end | |
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 | 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 | 2221 | if not t then |
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 | 2233 | return true |
2234 | else | |
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 | 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 | 2241 | else |
2242 | break; | |
2243 | end | |
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 | 2252 | end |
2253 | ) | |
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 | 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 | 2263 | return |
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 | 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 | 2271 | end |
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 | 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 | 2297 | i"server.lua: auto-starting ssl negotiation..." |
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 | 2304 | return e,t |
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 | 2309 | return false |
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 | 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 | 2316 | end |
2317 | return e; | |
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 | 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 | 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 | 2328 | end |
2329 | return t-1 | |
2330 | end | |
2331 | return t | |
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 | 2337 | e:close() |
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 | 2341 | local i=t.sendbuffer; |
2342 | function t.sendbuffer() | |
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 | 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 | 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 | 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 | 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 | 2371 | o="luasec not found" |
2372 | end | |
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 | 2375 | return nil,o |
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 | 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 | 2386 | end |
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 | 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 | 2401 | end |
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 | 2404 | return true |
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 | 2410 | end |
2411 | a=0 | |
2412 | o=0 | |
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 | 2438 | return nil,"invalid settings table" |
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 | 2452 | return true |
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 | 2456 | return nil,"invalid listener function" |
2457 | end | |
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 | 2460 | return true |
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 | 2464 | end |
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 | 2467 | t=not not e; |
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 | 2470 | if t then return"quitting";end |
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 | 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 | 2481 | i"server.lua: found no handler and closed socket (writelist)" |
2482 | end | |
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 | 2486 | if e then |
2487 | e.readbuffer() | |
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 | 2490 | i"server.lua: found no handler and closed socket (readlist)" |
2491 | end | |
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 | 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 | 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 | 2535 | until t; |
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 | 2538 | return"quitting" |
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 | 2544 | return"select"; |
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 | 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 | 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 | 2594 | end |
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 | 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 | 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 | 2612 | end |
2613 | return t; | |
2614 | end | |
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 | 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 | 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 | 2632 | } |
2633 | end) | |
2634 | package.preload['util.xmppstream']=(function(...) | |
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 | 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 | 2698 | end |
2699 | end | |
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 | 2716 | end |
2717 | return; | |
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 | 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 | 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 | 2775 | end |
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 | 2790 | end |
2791 | e=nil; | |
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 | 2799 | end |
2800 | end | |
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 | 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 | 2852 | return{ |
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 | 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 | 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 | 2870 | }; |
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 | 2878 | end) |
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 | 2883 | local r=require"util.encodings".stringprep.nameprep; |
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 | 2886 | [" "]="\\20";['"']="\\22"; |
2887 | ["&"]="\\26";["'"]="\\27"; | |
2888 | ["/"]="\\2f";[":"]="\\3a"; | |
2889 | ["<"]="\\3c";[">"]="\\3e"; | |
2890 | ["@"]="\\40";["\\"]="\\5c"; | |
2891 | }; | |
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 | 2895 | local function t(e) |
2896 | if not e then return;end | |
2897 | local i,t=a(e,"^([^@/]+)@()"); | |
2898 | local t,o=a(e,"^([^@/]+)()",t) | |
2899 | if i and not t then return nil,nil,nil;end | |
2900 | local a=a(e,"^/(.+)$",o); | |
2901 | if(not t)or((not a)and#e>=o)then return nil,nil,nil;end | |
2902 | return i,t,a; | |
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 | 2905 | local t,e=t(e); |
2906 | if t and e then | |
2907 | return t.."@"..e; | |
2908 | end | |
2909 | return e; | |
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 | 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 | 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 | 2938 | end |
2939 | return e; | |
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 | 2951 | return true |
2952 | end | |
2953 | return false | |
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 | 2979 | end) |
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 | 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 | 3002 | return t; |
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 | 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 | 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 | 3022 | end |
3023 | end | |
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 | 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 | 3030 | s(e,t); |
3031 | end | |
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 | 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 | 3043 | if e~=nil then return e;end |
3044 | end | |
3045 | end | |
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 | 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 | 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 | 3125 | end) |
3126 | package.preload['util.dataforms']=(function(...) | |
3127 | local e=setmetatable; | |
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 | 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 | 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 | 3141 | local o={ |
3142 | title=e:get_child_text("title"); | |
3143 | instructions=e:get_child_text("instructions"); | |
3144 | }; | |
3145 | for e in e:childtags("field")do | |
3146 | local a={ | |
3147 | name=e.attr.var; | |
3148 | label=e.attr.label; | |
3149 | type=e.attr.type; | |
3150 | required=e:get_child("required")and true or nil; | |
3151 | value=e:get_child_text("value"); | |
3152 | }; | |
3153 | o[#o+1]=a; | |
3154 | if a.type then | |
3155 | local t={}; | |
3156 | if a.type:match"list%-"then | |
3157 | for e in e:childtags("option")do | |
3158 | t[#t+1]={label=e.attr.label,value=e:get_child_text("value")}; | |
3159 | end | |
3160 | for e in e:childtags("value")do | |
3161 | t[#t+1]={label=e.attr.label,value=e:get_text(),default=true}; | |
3162 | end | |
3163 | elseif a.type:match"%-multi"then | |
3164 | for e in e:childtags("value")do | |
3165 | t[#t+1]=e.attr.label and{label=e.attr.label,value=e:get_text()}or e:get_text(); | |
3166 | end | |
3167 | if a.type=="text-multi"then | |
3168 | a.value=h(t,"\n"); | |
3169 | else | |
3170 | a.value=t; | |
3171 | end | |
3172 | end | |
3173 | end | |
3174 | end | |
3175 | return new(o); | |
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 | 3179 | if t.title then |
3180 | e:tag("title"):text(t.title):up(); | |
3181 | end | |
3182 | if t.instructions then | |
3183 | e:tag("instructions"):text(t.instructions):up(); | |
3184 | end | |
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 | 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 | 3194 | :up(); |
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 | 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 | 3211 | e:tag("value"):text(t):up(); |
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 | 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 | 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 | 3229 | e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up(); |
3230 | if t.default then | |
3231 | e:tag("value"):text(t.value):up(); | |
3232 | end | |
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 | 3235 | end |
3236 | end | |
3237 | end | |
3238 | end | |
3239 | if o.required then | |
3240 | e:tag("required"):up(); | |
3241 | end | |
3242 | e:up(); | |
3243 | end | |
3244 | return e; | |
3245 | end | |
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 | 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 | 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 | 3255 | break; |
3256 | end | |
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 | 3259 | if t.required then |
3260 | a[t.name]="Required value missing"; | |
3261 | end | |
3262 | else | |
3263 | local e=e[t.type]; | |
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 | 3273 | end |
3274 | e["text-single"]= | |
3275 | function(t,a) | |
3276 | local t=t:get_child_text("value"); | |
3277 | if t and#t>0 then | |
3278 | return t | |
3279 | elseif a then | |
3280 | return nil,"Required value missing"; | |
3281 | end | |
3282 | end | |
3283 | e["text-private"]= | |
3284 | e["text-single"]; | |
3285 | e["jid-single"]= | |
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 | 3293 | elseif o then |
3294 | return nil,"Required value missing"; | |
3295 | end | |
3296 | end | |
3297 | e["jid-multi"]= | |
3298 | function(o,i) | |
3299 | local a={}; | |
3300 | local t={}; | |
3301 | for e in o:childtags("value")do | |
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 | 3304 | a[#a+1]=o; |
3305 | if e and not o then | |
3306 | t[#t+1]=("Invalid JID: "..e); | |
3307 | end | |
3308 | end | |
3309 | if#a>0 then | |
3310 | return a,(#t>0 and h(t,"\n")or nil); | |
3311 | elseif i then | |
3312 | return nil,"Required value missing"; | |
3313 | end | |
3314 | end | |
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 | 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 | 3319 | t[#t+1]=e:get_text(); |
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 | 3322 | end |
3323 | e["text-multi"]= | |
3324 | function(t,a) | |
3325 | local t,a=e["list-multi"](t,a); | |
3326 | if t then | |
3327 | t=h(t,"\n"); | |
3328 | end | |
3329 | return t,a; | |
3330 | end | |
3331 | e["list-single"]= | |
3332 | e["text-single"]; | |
3333 | local a={ | |
3334 | ["1"]=true,["true"]=true, | |
3335 | ["0"]=false,["false"]=false, | |
3336 | }; | |
3337 | e["boolean"]= | |
3338 | function(t,o) | |
3339 | local t=t:get_child_text("value"); | |
3340 | local a=a[t~=nil and t]; | |
3341 | if a~=nil then | |
3342 | return a; | |
3343 | elseif t then | |
3344 | return nil,"Invalid boolean representation"; | |
3345 | elseif o then | |
3346 | return nil,"Required value missing"; | |
3347 | end | |
3348 | end | |
3349 | e["hidden"]= | |
3350 | function(e) | |
3351 | return e:get_child_text("value"); | |
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 | 3354 | end) |
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 | 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 | 3363 | for t,e in r(e)do |
3364 | if e.name=="identity"then | |
3365 | n(a,(e.attr.category or"").."\0"..(e.attr.type or"").."\0"..(e.attr["xml:lang"]or"").."\0"..(e.attr.name or"")); | |
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 | 3368 | elseif e.name=="x"and e.attr.xmlns=="jabber:x:data"then |
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 | 3371 | for a,e in r(e.tags)do |
3372 | if e.name=="field"and e.attr.var then | |
3373 | local a={}; | |
3374 | for t,e in r(e.tags)do | |
3375 | e=#e.tags==0 and e:get_text(); | |
3376 | if e then n(a,e);end | |
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 | 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 | 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 | 3383 | else |
3384 | n(t,e.attr.var); | |
3385 | end | |
3386 | end | |
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 | 3402 | return t,e; |
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 | 3407 | end) |
3408 | package.preload['util.vcard']=(function(...) | |
3409 | local o=require"util.stanza"; | |
3410 | local a,u=table.insert,table.concat; | |
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 | 3415 | local i; |
3416 | local function e() | |
3417 | error"Not implemented" | |
3418 | end | |
3419 | local function e() | |
3420 | error"Not implemented" | |
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 | 3423 | return e:gsub("[,:;\\]","\\%1"):gsub("\n","\\n"); |
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 | 3426 | return e:gsub("\\?[\\nt:;,]",{ |
3427 | ["\\\\"]="\\", | |
3428 | ["\\n"]="\n", | |
3429 | ["\\r"]="\r", | |
3430 | ["\\t"]="\t", | |
3431 | ["\\:"]=":", | |
3432 | ["\\;"]=";", | |
3433 | ["\\,"]=",", | |
3434 | [":"]="\29", | |
3435 | [";"]="\30", | |
3436 | [","]="\31", | |
3437 | }); | |
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 | 3451 | break; |
3452 | end | |
3453 | end | |
3454 | end | |
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 | 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 | 3473 | end |
3474 | end | |
3475 | end | |
3476 | return a; | |
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 | 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 | 3482 | end |
3483 | return t; | |
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 | 3497 | t=t |
3498 | :gsub("\r\n","\n") | |
3499 | :gsub("\n ","") | |
3500 | :gsub("\n\n+","\n"); | |
3501 | local h={}; | |
3502 | local e; | |
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 | 3505 | local s,t,n=t:match("^([-%a]+)(\30?[^\29]*)\29(.*)$"); |
3506 | n=n:gsub("\29",":"); | |
3507 | if#t>0 then | |
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 | 3510 | e=e:upper(); |
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 | 3513 | t[#t+1]=e |
3514 | t[e]=true; | |
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 | 3517 | a[e]=t; |
3518 | else | |
3519 | a[e]=true; | |
3520 | end | |
3521 | end | |
3522 | t=a; | |
3523 | end | |
3524 | if s=="BEGIN"and n=="VCARD"then | |
3525 | e={}; | |
3526 | h[#h+1]=e; | |
3527 | elseif s=="END"and n=="VCARD"then | |
3528 | e=nil; | |
3529 | elseif e and i[s]then | |
3530 | local o=i[s]; | |
3531 | local i={name=s}; | |
3532 | e[#e+1]=i; | |
3533 | local s=e; | |
3534 | e=i; | |
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 | 3537 | local a=a:lower(); |
3538 | if(t.TYPE and t.TYPE[a]==true) | |
3539 | or t[a]==true then | |
3540 | e.TYPE=a; | |
3541 | end | |
3542 | end | |
3543 | end | |
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 | 3546 | if t[a]then |
3547 | if t[a]==true then | |
3548 | e[a]=true; | |
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 | 3551 | e[a]=t; |
3552 | end | |
3553 | end | |
3554 | end | |
3555 | end | |
3556 | end | |
3557 | if o=="text"or o.value then | |
3558 | a(e,n); | |
3559 | elseif o.values then | |
3560 | local t="\30"..n; | |
3561 | for t in t:gmatch("\30([^\30]*)")do | |
3562 | a(e,t); | |
3563 | end | |
3564 | end | |
3565 | e=s; | |
3566 | end | |
3567 | end | |
3568 | return h; | |
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 | 3571 | local t={}; |
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 | 3574 | end |
3575 | t=u(t,";"); | |
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 | 3578 | if h(e)=="string"and e~="name"then |
3579 | a=a..(";%s=%s"):format(e,h(t)=="table"and u(t,",")or t); | |
3580 | end | |
3581 | end | |
3582 | return("%s%s:%s"):format(e.name,a,t) | |
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 | 3585 | local e={}; |
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 | 3589 | end |
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 | 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 | 3596 | else |
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 | 3602 | end |
3603 | end | |
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 | 3629 | break; |
3630 | end | |
3631 | end | |
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 | 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 | 3658 | end |
3659 | end | |
3660 | end | |
3661 | else | |
3662 | return nil | |
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 | 3675 | if e.attr.xmlns~="vcard-temp"then |
3676 | return nil,"wrong-xmlns"; | |
3677 | end | |
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 | 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 | 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 | 3687 | end |
3688 | end | |
3689 | i={ | |
3690 | VERSION="text", | |
3691 | FN="text", | |
3692 | N={ | |
3693 | values={ | |
3694 | "FAMILY", | |
3695 | "GIVEN", | |
3696 | "MIDDLE", | |
3697 | "PREFIX", | |
3698 | "SUFFIX", | |
3699 | }, | |
3700 | }, | |
3701 | NICKNAME="text", | |
3702 | PHOTO={ | |
3703 | props_verbatim={ENCODING={"b"}}, | |
3704 | props={"TYPE"}, | |
3705 | value="BINVAL", | |
3706 | }, | |
3707 | BDAY="text", | |
3708 | ADR={ | |
3709 | types={ | |
3710 | "HOME", | |
3711 | "WORK", | |
3712 | "POSTAL", | |
3713 | "PARCEL", | |
3714 | "DOM", | |
3715 | "INTL", | |
3716 | "PREF", | |
3717 | }, | |
3718 | values={ | |
3719 | "POBOX", | |
3720 | "EXTADD", | |
3721 | "STREET", | |
3722 | "LOCALITY", | |
3723 | "REGION", | |
3724 | "PCODE", | |
3725 | "CTRY", | |
3726 | } | |
3727 | }, | |
3728 | LABEL={ | |
3729 | types={ | |
3730 | "HOME", | |
3731 | "WORK", | |
3732 | "POSTAL", | |
3733 | "PARCEL", | |
3734 | "DOM", | |
3735 | "INTL", | |
3736 | "PREF", | |
3737 | }, | |
3738 | value="LINE", | |
3739 | }, | |
3740 | TEL={ | |
3741 | types={ | |
3742 | "HOME", | |
3743 | "WORK", | |
3744 | "VOICE", | |
3745 | "FAX", | |
3746 | "PAGER", | |
3747 | "MSG", | |
3748 | "CELL", | |
3749 | "VIDEO", | |
3750 | "BBS", | |
3751 | "MODEM", | |
3752 | "ISDN", | |
3753 | "PCS", | |
3754 | "PREF", | |
3755 | }, | |
3756 | value="NUMBER", | |
3757 | }, | |
3758 | EMAIL={ | |
3759 | types={ | |
3760 | "HOME", | |
3761 | "WORK", | |
3762 | "INTERNET", | |
3763 | "PREF", | |
3764 | "X400", | |
3765 | }, | |
3766 | value="USERID", | |
3767 | }, | |
3768 | JABBERID="text", | |
3769 | MAILER="text", | |
3770 | TZ="text", | |
3771 | GEO={ | |
3772 | values={ | |
3773 | "LAT", | |
3774 | "LON", | |
3775 | }, | |
3776 | }, | |
3777 | TITLE="text", | |
3778 | ROLE="text", | |
3779 | LOGO="copy of PHOTO", | |
3780 | AGENT="text", | |
3781 | ORG={ | |
3782 | values={ | |
3783 | behaviour="repeat-last", | |
3784 | "ORGNAME", | |
3785 | "ORGUNIT", | |
3786 | } | |
3787 | }, | |
3788 | CATEGORIES={ | |
3789 | values="KEYWORD", | |
3790 | }, | |
3791 | NOTE="text", | |
3792 | PRODID="text", | |
3793 | REV="text", | |
3794 | SORTSTRING="text", | |
3795 | SOUND="copy of PHOTO", | |
3796 | UID="text", | |
3797 | URL="text", | |
3798 | CLASS={ | |
3799 | names={ | |
3800 | "PUBLIC", | |
3801 | "PRIVATE", | |
3802 | "CONFIDENTIAL", | |
3803 | }, | |
3804 | }, | |
3805 | KEY={ | |
3806 | props={"TYPE"}, | |
3807 | value="CRED", | |
3808 | }, | |
3809 | DESC="text", | |
3810 | }; | |
3811 | i.LOGO=i.PHOTO; | |
3812 | i.SOUND=i.PHOTO; | |
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 | 3824 | }; |
3825 | end) | |
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 | 3836 | return function(t,e,...) |
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 | 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 | 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 | 3843 | elseif t=="error"then |
3844 | return o(e,...); | |
3845 | end | |
3846 | end | |
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 | 3857 | end |
3858 | end | |
3859 | return e; | |
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 | 3863 | for t=1,#e do |
3864 | e[t]=nil; | |
3865 | end | |
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 | 3869 | if not t[e]then |
3870 | t[e]={a}; | |
3871 | else | |
3872 | t[e][#t[e]+1]=a; | |
3873 | end | |
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 | 3882 | end) |
3883 | package.preload['util.datetime']=(function(...) | |
3884 | local e=os.date; | |
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 | 3890 | return e("!%Y-%m-%d",t); |
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 | 3893 | return e("!%Y-%m-%dT%H:%M:%SZ",t); |
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 | 3896 | return e("!%H:%M:%S",t); |
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 | 3899 | return e("!%Y%m%dT%H:%M:%S",t); |
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 | 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 | 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 | 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 | 4717 | end) |
4718 | package.preload['util.sasl.plain']=(function(...) | |
4719 | return function(e,t) | |
4720 | if t=="PLAIN"and e.username and e.password then | |
4721 | return function(e) | |
4722 | return"success"==coroutine.yield("\0"..e.username.."\0"..e.password); | |
4723 | end,5; | |
4724 | end | |
4725 | end | |
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 | 4736 | package.preload['verse.plugins.tls']=(function(...) |
4737 | local a=require"verse"; | |
4738 | local t="urn:ietf:params:xml:ns:xmpp-tls"; | |
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 | 4741 | if e.authenticated then return;end |
4742 | if o:get_child("starttls",t)and e.conn.starttls then | |
4743 | e:debug("Negotiating TLS..."); | |
4744 | e:send(a.stanza("starttls",{xmlns=t})); | |
4745 | return true; | |
4746 | elseif not e.conn.starttls and not e.secure then | |
4747 | e:warn("SSL libary (LuaSec) not loaded, so TLS not available"); | |
4748 | elseif not e.secure then | |
4749 | e:debug("Server doesn't offer TLS :("); | |
4750 | end | |
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 | 4753 | if t.name=="proceed"then |
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 | 4756 | end |
4757 | end | |
4758 | local function a(t) | |
4759 | if t=="ssl-handshake-complete"then | |
4760 | e.secure=true; | |
4761 | e:debug("Re-opening stream..."); | |
4762 | e:reopen(); | |
4763 | end | |
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 | 4767 | e:hook("status",a,400); |
4768 | return true; | |
4769 | end | |
4770 | end) | |
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 | 4777 | if e.authenticated then return;end |
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 | 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 | 4782 | local i={}; |
4783 | for t in t:childtags("mechanism")do | |
4784 | t=t:get_text(); | |
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 | 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 | 4789 | if s then |
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 | 4794 | end |
4795 | end | |
4796 | end | |
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 | 4799 | table.insert(t,e); |
4800 | end | |
4801 | if not t[1]then | |
4802 | e:event("authentication-failure",{condition="no-supported-sasl-mechanisms"}); | |
4803 | e:close(); | |
4804 | return; | |
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 | 4807 | local t,i=t[1]; |
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 | 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 | 4812 | if i then |
4813 | t:text(s(i)); | |
4814 | end | |
4815 | e:send(t); | |
4816 | return true; | |
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 | 4819 | if t.name=="failure"then |
4820 | local a=t.tags[1]; | |
4821 | local t=t:get_child_text("text"); | |
4822 | e:event("authentication-failure",{condition=a.name,text=t}); | |
4823 | e:close(); | |
4824 | return false; | |
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 | 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 | 4829 | e:close(); |
4830 | return false; | |
4831 | elseif t==true then | |
4832 | e:event("authentication-success"); | |
4833 | e.authenticated=true | |
4834 | e:reopen(); | |
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 | 4837 | end |
4838 | return true; | |
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 | 4842 | return true; |
4843 | end | |
4844 | end) | |
4845 | package.preload['verse.plugins.bind']=(function(...) | |
4846 | local t=require"verse"; | |
4847 | local o=require"util.jid"; | |
4848 | local a="urn:ietf:params:xml:ns:xmpp-bind"; | |
4849 | function t.plugins.bind(e) | |
4850 | local function i(i) | |
4851 | if e.bound then return;end | |
4852 | e:debug("Binding resource..."); | |
4853 | e:send_iq(t.iq({type="set"}):tag("bind",{xmlns=a}):tag("resource"):text(e.resource), | |
4854 | function(t) | |
4855 | if t.attr.type=="result"then | |
4856 | local t=t | |
4857 | :get_child("bind",a) | |
4858 | :get_child_text("jid"); | |
4859 | e.username,e.host,e.resource=o.split(t); | |
4860 | e.jid,e.bound=t,true; | |
4861 | e:event("bind-success",{jid=t}); | |
4862 | elseif t.attr.type=="error"then | |
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 | 4866 | end |
4867 | end); | |
4868 | end | |
4869 | e:hook("stream-features",i,200); | |
4870 | return true; | |
4871 | end | |
4872 | end) | |
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 | 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 | 4883 | function(t) |
4884 | if t.attr.type=="result"then | |
4885 | e:event("session-success"); | |
4886 | elseif t.attr.type=="error"then | |
4887 | local t,o,a=t:get_error(); | |
4888 | e:event("session-failure",{error=o,text=a,type=t}); | |
4889 | end | |
4890 | end); | |
4891 | return true; | |
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 | 4897 | return true; |
4898 | end | |
4899 | end) | |
4900 | package.preload['verse.plugins.legacy']=(function(...) | |
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 | 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 | 4910 | end |
4911 | local t={ | |
4912 | username=e.username; | |
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 | 4915 | digest=false,sequence=false,token=false; |
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 | 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 | 4925 | elseif i==nil then |
4926 | local t="feature-not-implemented"; | |
4927 | e:event("authentication-failure",{condition=t}); | |
4928 | return false; | |
4929 | end | |
4930 | end | |
4931 | else | |
4932 | for t,e in pairs(t)do | |
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 | 4939 | if a.attr.type=="result"then |
4940 | e.resource=t.resource; | |
4941 | e.jid=t.username.."@"..e.host.."/"..t.resource; | |
4942 | e:event("authentication-success"); | |
4943 | e:event("bind-success",e.jid); | |
4944 | else | |
4945 | local a,t,a=a:get_error(); | |
4946 | e:event("authentication-failure",{condition=t}); | |
4947 | end | |
4948 | end); | |
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 | 4951 | if not t.version then |
4952 | e:send_iq(i.iq({type="get"}) | |
4953 | :tag("query",{xmlns="jabber:iq:auth"}) | |
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 | 4959 | end |
4960 | end) | |
4961 | package.preload['verse.plugins.compression']=(function(...) | |
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 | 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 | 4970 | if i==false then |
4971 | local t=a.stanza("failure",{xmlns=t}):tag("setup-failed"); | |
4972 | o:send(t); | |
4973 | o:error("Failed to create zlib.deflate filter: %s",tostring(e)); | |
4974 | return | |
4975 | end | |
4976 | return e | |
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 | 4980 | if i==false then |
4981 | local t=a.stanza("failure",{xmlns=t}):tag("setup-failed"); | |
4982 | o:send(t); | |
4983 | o:error("Failed to create zlib.inflate filter: %s",tostring(e)); | |
4984 | return | |
4985 | end | |
4986 | return e | |
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 | 4989 | function e:send(i) |
4990 | local i,o,n=pcall(o,tostring(i),'sync'); | |
4991 | if i==false then | |
4992 | e:close({ | |
4993 | condition="undefined-condition"; | |
4994 | text=o; | |
4995 | extra=a.stanza("failure",{xmlns=t}):tag("processing-failed"); | |
4996 | }); | |
4997 | e:warn("Compressed send failed: %s",tostring(o)); | |
4998 | return; | |
4999 | end | |
5000 | e.conn:write(o); | |
5001 | end; | |
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 | 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 | 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 | 5009 | e:close({ |
5010 | condition="undefined-condition"; | |
5011 | text=o; | |
5012 | extra=a.stanza("failure",{xmlns=t}):tag("processing-failed"); | |
5013 | }); | |
5014 | stream:warn("%s",tostring(o)); | |
5015 | return; | |
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 | 5018 | end; |
5019 | end | |
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 | 5022 | if not e.compressed then |
5023 | local o=o:child_with_name("compression"); | |
5024 | if o then | |
5025 | for o in o:children()do | |
5026 | local o=o[1] | |
5027 | if o=="zlib"then | |
5028 | e:send(a.stanza("compress",{xmlns=t}):tag("method"):text("zlib")) | |
5029 | e:debug("Enabled compression using zlib.") | |
5030 | return true; | |
5031 | end | |
5032 | end | |
5033 | session:debug("Remote server supports no compression algorithm we support.") | |
5034 | end | |
5035 | end | |
5036 | end | |
5037 | local function o(t) | |
5038 | if t.name=="compressed"then | |
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 | 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 | 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 | 5046 | e.compressed=true; |
5047 | e:reopen(); | |
5048 | elseif t.name=="failure"then | |
5049 | e:warn("Failed to establish compression"); | |
5050 | end | |
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 | 5053 | e:hook("stream/"..t,o); |
5054 | end | |
5055 | end) | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 5082 | return; |
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 | 5087 | end |
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 | 5091 | end); |
5092 | end | |
5093 | end | |
5094 | end | |
5095 | local function h() | |
5096 | e:debug("smacks: connection lost"); | |
5097 | e.stream_management_supported=nil; | |
5098 | if e.resumption_token then | |
5099 | e:debug("smacks: have resumption token, reconnecting in 1s..."); | |
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 | 5102 | e:connect(e.connect_host or e.host,e.connect_port or 5222); |
5103 | end); | |
5104 | return true; | |
5105 | end | |
5106 | end | |
5107 | local function r() | |
5108 | e.resumption_token=nil; | |
5109 | e:unhook("disconnected",h); | |
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 | 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 | 5120 | table.remove(t,1); |
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 | 5130 | e:hook("closed",r,100); |
5131 | e:hook("disconnected",h,100); | |
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 | 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 | 5138 | table.remove(t,1); |
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 | 5142 | end |
5143 | for a=1,#t do | |
5144 | e:send(t[a]); | |
5145 | end | |
5146 | t={}; | |
5147 | e:debug("Resumed successfully"); | |
5148 | e:event("resumed"); | |
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 | 5151 | end |
5152 | end | |
5153 | local function o() | |
5154 | if not e.smacks then | |
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 | 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 | 5160 | end |
5161 | end | |
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 | 5164 | e.stream_management_supported=true; |
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 | 5169 | return true; |
5170 | else | |
5171 | e:hook("bind-success",o,1); | |
5172 | end | |
5173 | end | |
5174 | end | |
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 | 5177 | end |
5178 | end) | |
5179 | package.preload['verse.plugins.keepalive']=(function(...) | |
5180 | local t=require"verse"; | |
5181 | function t.plugins.keepalive(e) | |
5182 | e.keepalive_timeout=e.keepalive_timeout or 300; | |
5183 | t.add_task(e.keepalive_timeout,function() | |
5184 | e.conn:write(" "); | |
5185 | return e.keepalive_timeout; | |
5186 | end); | |
5187 | end | |
5188 | end) | |
5189 | package.preload['verse.plugins.disco']=(function(...) | |
5190 | local a=require"verse"; | |
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 | 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 | 5197 | function a.plugins.disco(e) |
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 | 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 | 5207 | end, |
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 | 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 | 5213 | return e; |
5214 | end, | |
5215 | }; | |
5216 | e.disco={ | |
5217 | cache={}, | |
5218 | info=setmetatable({ | |
5219 | [false]={ | |
5220 | identities={ | |
5221 | {category='client',type='pc',name='Verse'}, | |
5222 | }, | |
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 | 5226 | [o]=true, |
5227 | }, | |
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 | 5231 | }; |
5232 | e.caps={} | |
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 | 5235 | if t.category<e.category then |
5236 | return true; | |
5237 | elseif e.category<t.category then | |
5238 | return false; | |
5239 | end | |
5240 | if t.type<e.type then | |
5241 | return true; | |
5242 | elseif e.type<t.type then | |
5243 | return false; | |
5244 | end | |
5245 | if(not t['xml:lang']and e['xml:lang'])or | |
5246 | (e['xml:lang']and t['xml:lang']<e['xml:lang'])then | |
5247 | return true | |
5248 | end | |
5249 | return false | |
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 | 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 | 5264 | e[#e+1]=table.concat({ |
5265 | t.category,t.type or'', | |
5266 | t['xml:lang']or'',t.name or'' | |
5267 | },'/'); | |
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 | 5270 | e[#e+1]=t.var |
5271 | end | |
5272 | e[#e+1]=''; | |
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 | 5275 | end |
5276 | setmetatable(e.caps,{ | |
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 | 5279 | e.caps.hash=t; |
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 | 5282 | hash='sha-1', |
5283 | node=e.caps.node, | |
5284 | ver=t | |
5285 | }) | |
5286 | end | |
5287 | }) | |
5288 | function e:set_identity(t,a) | |
5289 | self.disco.info[a or false].identities={t}; | |
5290 | e:resend_presence(); | |
5291 | end | |
5292 | function e:add_identity(a,t) | |
5293 | local t=self.disco.info[t or false].identities; | |
5294 | t[#t+1]=a; | |
5295 | e:resend_presence(); | |
5296 | end | |
5297 | function e:add_disco_feature(t,a) | |
5298 | local t=t.var or t; | |
5299 | self.disco.info[a or false].features[t]=true; | |
5300 | e:resend_presence(); | |
5301 | end | |
5302 | function e:remove_disco_feature(t,a) | |
5303 | local t=t.var or t; | |
5304 | self.disco.info[a or false].features[t]=nil; | |
5305 | e:resend_presence(); | |
5306 | end | |
5307 | function e:add_disco_item(t,e) | |
5308 | local e=self.disco.items[e or false]; | |
5309 | e[#e+1]=t; | |
5310 | end | |
5311 | function e:remove_disco_item(a,e) | |
5312 | local e=self.disco.items[e or false]; | |
5313 | for t=#e,1,-1 do | |
5314 | if e[t]==a then | |
5315 | table.remove(e,t); | |
5316 | end | |
5317 | end | |
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 | 5321 | if not o then |
5322 | return nil,"no-cache"; | |
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 | 5330 | return true; |
5331 | end | |
5332 | end | |
5333 | end | |
5334 | function e:jid_supports(e,t) | |
5335 | local e=self.disco.cache[e]; | |
5336 | if not e or not e.features then | |
5337 | return nil,"no-cache"; | |
5338 | end | |
5339 | return e.features[t]or false; | |
5340 | end | |
5341 | function e:get_local_services(o,a) | |
5342 | local e=self.disco.cache[self.host]; | |
5343 | if not(e)or not(e.items)then | |
5344 | return nil,"no-cache"; | |
5345 | end | |
5346 | local t={}; | |
5347 | for i,e in ipairs(e.items)do | |
5348 | if self:jid_has_identity(e.jid,o,a)then | |
5349 | table.insert(t,e.jid); | |
5350 | end | |
5351 | end | |
5352 | return t; | |
5353 | end | |
5354 | function e:disco_local_services(a) | |
5355 | self:disco_items(self.host,nil,function(t) | |
5356 | if not t then | |
5357 | return a({}); | |
5358 | end | |
5359 | local e=0; | |
5360 | local function o() | |
5361 | e=e-1; | |
5362 | if e==0 then | |
5363 | return a(t); | |
5364 | end | |
5365 | end | |
5366 | for a,t in ipairs(t)do | |
5367 | if t.jid then | |
5368 | e=e+1; | |
5369 | self:disco_info(t.jid,nil,o); | |
5370 | end | |
5371 | end | |
5372 | if e==0 then | |
5373 | return a(t); | |
5374 | end | |
5375 | end); | |
5376 | end | |
5377 | function e:disco_info(e,t,s) | |
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 | 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 | 5388 | elseif e.name=="feature"then |
5389 | a[e.attr.var]=true; | |
5390 | end | |
5391 | end | |
5392 | if not self.disco.cache[e]then | |
5393 | self.disco.cache[e]={nodes={}}; | |
5394 | end | |
5395 | if t then | |
5396 | if not self.disco.cache[e].nodes[t]then | |
5397 | self.disco.cache[e].nodes[t]={nodes={}}; | |
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 | 5400 | self.disco.cache[e].nodes[t].features=a; |
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 | 5403 | self.disco.cache[e].features=a; |
5404 | end | |
5405 | return s(self.disco.cache[e]); | |
5406 | end); | |
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 | 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 | 5422 | }); |
5423 | end | |
5424 | end | |
5425 | if not self.disco.cache[t]then | |
5426 | self.disco.cache[t]={nodes={}}; | |
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 | 5437 | end); |
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 | 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 | 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 | 5450 | node=t, |
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 | 5453 | t:tag('identity',e):up() |
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 | 5456 | t:tag('feature',{var=a}):up() |
5457 | end | |
5458 | e:send(t); | |
5459 | return true | |
5460 | end | |
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 | 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 | 5468 | node=t.attr.node |
5469 | }) | |
5470 | for a=1,#n do | |
5471 | t:tag('item',n[a]):up() | |
5472 | end | |
5473 | e:send(t); | |
5474 | return true | |
5475 | end | |
5476 | end); | |
5477 | local t; | |
5478 | e:hook("ready",function() | |
5479 | if t then return;end | |
5480 | t=true; | |
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 | 5489 | }); |
5490 | end | |
5491 | end | |
5492 | end | |
5493 | e:event("ready"); | |
5494 | end); | |
5495 | return true; | |
5496 | end,50); | |
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 | 5499 | t:reset():add_child(e:caps()):reset(); |
5500 | end | |
5501 | end,10); | |
5502 | end | |
5503 | end) | |
5504 | package.preload['verse.plugins.version']=(function(...) | |
5505 | local o=require"verse"; | |
5506 | local a="jabber:iq:version"; | |
5507 | local function i(e,t) | |
5508 | e.name=t.name; | |
5509 | e.version=t.version; | |
5510 | e.platform=t.platform; | |
5511 | end | |
5512 | function o.plugins.version(e) | |
5513 | e.version={set=i}; | |
5514 | e:hook("iq/"..a,function(t) | |
5515 | if t.attr.type~="get"then return;end | |
5516 | local t=o.reply(t) | |
5517 | :tag("query",{xmlns=a}); | |
5518 | if e.version.name then | |
5519 | t:tag("name"):text(tostring(e.version.name)):up(); | |
5520 | end | |
5521 | if e.version.version then | |
5522 | t:tag("version"):text(tostring(e.version.version)):up() | |
5523 | end | |
5524 | if e.version.platform then | |
5525 | t:tag("os"):text(e.version.platform); | |
5526 | end | |
5527 | e:send(t); | |
5528 | return true; | |
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 | 5533 | :tag("query",{xmlns=a}), |
5534 | function(o) | |
5535 | if o.attr.type=="result"then | |
5536 | local e=o:get_child("query",a); | |
5537 | local o=e and e:get_child_text("name"); | |
5538 | local a=e and e:get_child_text("version"); | |
5539 | local e=e and e:get_child_text("os"); | |
5540 | t({ | |
5541 | name=o; | |
5542 | version=a; | |
5543 | platform=e; | |
5544 | }); | |
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 | 5547 | t({ |
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 | 5552 | }); |
5553 | end | |
5554 | end); | |
5555 | end | |
5556 | return true; | |
5557 | end | |
5558 | end) | |
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 | 5567 | function(e) |
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 | 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 | 5572 | return; |
5573 | end | |
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 | 5576 | end); |
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 | 5580 | end); |
5581 | return true; | |
5582 | end | |
5583 | end) | |
5584 | package.preload['verse.plugins.uptime']=(function(...) | |
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 | 5589 | end |
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 | 5596 | e:send(t); |
5597 | return true; | |
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 | 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 | 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 | 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 | 5608 | seconds=e or nil; |
5609 | }); | |
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 | 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 | 5617 | }); |
5618 | end | |
5619 | end); | |
5620 | end | |
5621 | return true; | |
5622 | end | |
5623 | end) | |
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 | 5628 | e.blocking={}; |
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 | 5632 | :tag("item",{jid=i}) |
5633 | ,function()return t and t(true);end | |
5634 | ,function()return t and t(false);end | |
5635 | ); | |
5636 | end | |
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 | 5640 | :tag("item",{jid=i}) |
5641 | ,function()return t and t(true);end | |
5642 | ,function()return t and t(false);end | |
5643 | ); | |
5644 | end | |
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 | 5648 | ,function()return t and t(true);end |
5649 | ,function()return t and t(false);end | |
5650 | ); | |
5651 | end | |
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 | 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 | 5657 | if not a then return t and t(false);end |
5658 | local e={}; | |
5659 | for t in a:childtags()do | |
5660 | e[#e+1]=t.attr.jid; | |
5661 | end | |
5662 | return t and t(e); | |
5663 | end | |
5664 | ,function(e)return t and t(false);end | |
5665 | ); | |
5666 | end | |
5667 | end | |
5668 | end) | |
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 | 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 | 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 | 5675 | local t={}; |
5676 | t.__index=t; | |
5677 | local e={}; | |
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 | 5680 | e:hook("ready",function() |
5681 | e:add_disco_feature(i); | |
5682 | end,10); | |
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 | 5685 | role="initiator"; |
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 | 5688 | stream=e; |
5689 | },t)); | |
5690 | end | |
5691 | function e:register_jingle_transport(e) | |
5692 | end | |
5693 | function e:register_jingle_content_type(e) | |
5694 | end | |
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 | 5702 | return true; |
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 | 5707 | e:send(t); |
5708 | return; | |
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 | 5712 | role="receiver"; |
5713 | peer=n.attr.from; | |
5714 | sid=l; | |
5715 | stream=e; | |
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 | 5721 | if t.name=="content"and t.attr.xmlns==i then |
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 | 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 | 5735 | break; |
5736 | end | |
5737 | end | |
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 | 5741 | return true; |
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 | 5745 | return true; |
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 | 5752 | end |
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 | 5755 | return false; |
5756 | end | |
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 | 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 | 5761 | return true; |
5762 | end | |
5763 | function t:handle_command(a) | |
5764 | local t=a.attr.action; | |
5765 | e:debug("Handling Jingle command: %s",t); | |
5766 | if t=="session-terminate"then | |
5767 | self:destroy(); | |
5768 | elseif t=="session-accept"then | |
5769 | self:handle_accepted(a); | |
5770 | elseif t=="transport-info"then | |
5771 | e:debug("Handling transport-info"); | |
5772 | self.transport:info_received(a); | |
5773 | elseif t=="transport-replace"then | |
5774 | e:error("Peer wanted to swap transport, not implemented"); | |
5775 | else | |
5776 | e:warn("Unhandled Jingle command: %s",t); | |
5777 | return nil; | |
5778 | end | |
5779 | return true; | |
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 | 5783 | :tag("jingle",{ |
5784 | xmlns=i, | |
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 | 5787 | initiator=self.role=="initiator"and self.stream.jid or nil, |
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 | 5798 | :tag("jingle",{ |
5799 | xmlns=i, | |
5800 | sid=self.sid, | |
5801 | action="session-accept", | |
5802 | responder=e.jid, | |
5803 | }) | |
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 | 5813 | e:error("session-accept rejected: %s",t); |
5814 | return false; | |
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 | 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 | 5820 | end); |
5821 | end); | |
5822 | end | |
5823 | e:hook("iq/"..i,u); | |
5824 | return true; | |
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 | 5828 | :tag("jingle",{xmlns=i,action="session-initiate", |
5829 | initiator=self.stream.jid,sid=self.sid}); | |
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 | 5832 | if not t then |
5833 | return false,"Unknown content type"; | |
5834 | end | |
5835 | e:add_child(t); | |
5836 | local t=self.stream:event("jingle/transport/".."urn:xmpp:jingle:transports:s5b:1",self); | |
5837 | self.transport=t; | |
5838 | e:add_child(t:generate_initiate()); | |
5839 | self.stream:debug("Hooking %s","jingle/"..self.sid); | |
5840 | self.stream:hook("jingle/"..self.sid,function(e) | |
5841 | if e.attr.from~=self.peer then | |
5842 | return false; | |
5843 | end | |
5844 | local e=e:get_child("jingle",i); | |
5845 | return self:handle_command(e) | |
5846 | end); | |
5847 | self.stream:send_iq(e,function(e) | |
5848 | if e.attr.type=="error"then | |
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 | 5852 | end |
5853 | end); | |
5854 | self.state="pending"; | |
5855 | end | |
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 | 5858 | self:send_command("session-terminate",e,function(e) |
5859 | self.state="terminated"; | |
5860 | self.transport:disconnect(); | |
5861 | self:destroy(); | |
5862 | end); | |
5863 | end | |
5864 | function t:destroy() | |
5865 | self:event("terminated"); | |
5866 | self.stream:unhook("jingle/"..self.sid,self.handle_command); | |
5867 | end | |
5868 | function t:handle_accepted(e) | |
5869 | local e=e:child_with_name("transport"); | |
5870 | self.transport:handle_accepted(e); | |
5871 | self.transport:connect(function(e) | |
5872 | self.stream:debug("CONNECTED (initiator)!") | |
5873 | self.state="active"; | |
5874 | self:event("connected",e); | |
5875 | end); | |
5876 | end | |
5877 | function t:set_source(a,o) | |
5878 | local function t() | |
5879 | local e,i=a(); | |
5880 | if e and e~=""then | |
5881 | self.transport.conn:send(e); | |
5882 | elseif e==""then | |
5883 | return t(); | |
5884 | elseif e==nil then | |
5885 | if o then | |
5886 | self:terminate(); | |
5887 | end | |
5888 | self.transport.conn:unhook("drained",t); | |
5889 | a=nil; | |
5890 | end | |
5891 | end | |
5892 | self.transport.conn:hook("drained",t); | |
5893 | t(); | |
5894 | end | |
5895 | function t:set_sink(t) | |
5896 | self.transport.conn:hook("incoming-raw",t); | |
5897 | self.transport.conn:hook("disconnected",function(e) | |
5898 | self.stream:debug("Closing sink..."); | |
5899 | local e=e.reason; | |
5900 | if e=="closed"then e=nil;end | |
5901 | t(nil,e); | |
5902 | end); | |
5903 | end | |
5904 | end) | |
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 | 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 | 5916 | if e and e.save_file then |
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 | 5919 | self.jingle:set_sink(e); |
5920 | end); | |
5921 | end | |
5922 | return t; | |
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 | 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 | 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 | 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 | 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 | 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 | 5949 | local e,a=io.open(t); |
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 | 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 | 5954 | local e=self:jingle(n); |
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 | 5958 | }); |
5959 | e:hook("connected",function() | |
5960 | e:set_source(a,true); | |
5961 | end); | |
5962 | return e; | |
5963 | end | |
5964 | end | |
5965 | end) | |
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 | 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 | 5973 | local function a() |
5974 | e:unhook("connected",a); | |
5975 | return true; | |
5976 | end | |
5977 | local function o(t) | |
5978 | e:unhook("incoming-raw",o); | |
5979 | if t:sub(1,2)~="\005\000"then | |
5980 | return e:event("error","connection-failure"); | |
5981 | end | |
5982 | e:event("connected"); | |
5983 | return true; | |
5984 | end | |
5985 | local function i(a) | |
5986 | e:unhook("incoming-raw",i); | |
5987 | if a~="\005\000"then | |
5988 | local t="version-mismatch"; | |
5989 | if a:sub(1,1)=="\005"then | |
5990 | t="authentication-failure"; | |
5991 | end | |
5992 | return e:event("error",t); | |
5993 | end | |
5994 | e:send(string.char(5,1,0,3,#t)..t.."\0\0"); | |
5995 | e:hook("incoming-raw",o,100); | |
5996 | return true; | |
5997 | end | |
5998 | e:hook("connected",a,200); | |
5999 | e:hook("incoming-raw",i,100); | |
6000 | e:send("\005\001\000"); | |
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 | 6004 | streamhosts=e, |
6005 | current_host=0; | |
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 | 6010 | end |
6011 | if e.current_host<#e.streamhosts then | |
6012 | e.current_host=e.current_host+1; | |
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 | 6015 | e.streamhosts[e.current_host].host, |
6016 | e.streamhosts[e.current_host].port | |
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 | 6019 | e:debug("Error connecting to proxy (%s:%s): %s", |
6020 | e.streamhosts[e.current_host].host, | |
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 | 6023 | ); |
6024 | else | |
6025 | e:debug("Connecting..."); | |
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 | 6028 | return true; |
6029 | end | |
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 | 6032 | end |
6033 | e:hook("disconnected",t,100); | |
6034 | e:hook("connected",function() | |
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 | 6037 | end,100); |
6038 | t(); | |
6039 | return e; | |
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 | 6042 | e:hook("ready",function() |
6043 | e:add_disco_feature(o); | |
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 | 6049 | mode="tcp",sid=self.s5b_sid}); |
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 | 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 | 6055 | end |
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 | 6062 | self.s5b_mode=e.attr.mode or"tcp"; |
6063 | self.s5b_sid=e.attr.sid or self.jingle.sid; | |
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 | 6066 | type=e.attr.type; |
6067 | jid=e.attr.jid; | |
6068 | host=e.attr.host; | |
6069 | port=tonumber(e.attr.port)or 0; | |
6070 | priority=tonumber(e.attr.priority)or 0; | |
6071 | cid=e.attr.cid; | |
6072 | }; | |
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 | 6075 | return e; |
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 | 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 | 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 | 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 | 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 | 6094 | else |
6095 | e:warn("Actually, I'm going to wait for my peer to tell me its streamhost..."); | |
6096 | self.onconnect_callback=i; | |
6097 | end | |
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 | 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 | 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 | 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 | 6110 | :tag("activate"):text(self.jingle.peer),function(i) |
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 | 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 | 6115 | self.conn=e; |
6116 | self.onconnect_callback(e); | |
6117 | else | |
6118 | self.jingle.stream:error("Failed to activate bytestream"); | |
6119 | end | |
6120 | end); | |
6121 | end | |
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 | 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 | 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 | 6129 | end |
6130 | elseif i:get_child("activated")then | |
6131 | self.onconnect_callback(self.conn); | |
6132 | end | |
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 | 6135 | if self.conn then |
6136 | self.conn:close(); | |
6137 | end | |
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 | 6142 | e:hook("jingle/transport/"..o,function(e) |
6143 | return setmetatable({ | |
6144 | role=e.role, | |
6145 | peer=e.peer, | |
6146 | stream=e.stream, | |
6147 | jingle=e, | |
6148 | },t); | |
6149 | end); | |
6150 | end | |
6151 | end) | |
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 | 6162 | t.proxy65.available_streamhosts={}; |
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 | 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 | 6169 | e=e-1; |
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 | 6172 | :get_child("streamhost").attr; |
6173 | t.proxy65.available_streamhosts[e.jid]={ | |
6174 | jid=e.jid; | |
6175 | host=e.host; | |
6176 | port=tonumber(e.port); | |
6177 | }; | |
6178 | end | |
6179 | if e==0 then | |
6180 | t:event("proxy65/discovered-proxies",t.proxy65.available_streamhosts); | |
6181 | end | |
6182 | end); | |
6183 | end | |
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 | 6188 | streamhosts={}, |
6189 | current_host=0; | |
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 | 6192 | if t.name=="streamhost"then |
6193 | table.insert(e.streamhosts,t.attr); | |
6194 | end | |
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 | 6197 | if e.current_host<#e.streamhosts then |
6198 | e.current_host=e.current_host+1; | |
6199 | e:connect( | |
6200 | e.streamhosts[e.current_host].host, | |
6201 | e.streamhosts[e.current_host].port | |
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 | 6204 | return true; |
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 | 6208 | end |
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 | 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 | 6215 | :tag("streamhost-used",{jid=e.streamhosts[e.current_host].jid}); |
6216 | t:send(e); | |
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 | 6219 | end |
6220 | function e:refuse() | |
6221 | end | |
6222 | t:event("proxy65/request",e); | |
6223 | end); | |
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 | 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 | 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 | 6238 | e:event("connection-failed",{conn=e,type=t,condition=a,text=o}); |
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 | 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 | 6246 | break; |
6247 | end | |
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 | 6254 | :tag("activate"):text(t); |
6255 | self.stream:send_iq(t,function(t) | |
6256 | if t.attr.type=="result"then | |
6257 | e:event("connected",e); | |
6258 | end | |
6259 | end); | |
6260 | return true; | |
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 | 6264 | end |
6265 | end); | |
6266 | return e; | |
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 | 6272 | return true; |
6273 | end | |
6274 | local function o(t) | |
6275 | e:unhook("incoming-raw",o); | |
6276 | if t:sub(1,2)~="\005\000"then | |
6277 | return e:event("error","connection-failure"); | |
6278 | end | |
6279 | e:event("connected"); | |
6280 | return true; | |
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 | 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 | 6287 | t="authentication-failure"; |
6288 | end | |
6289 | return e:event("error",t); | |
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 | 6292 | e:hook("incoming-raw",o,100); |
6293 | return true; | |
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 | 6297 | e:send("\005\001\000"); |
6298 | end | |
6299 | end) | |
6300 | package.preload['verse.plugins.jingle_ibb']=(function(...) | |
6301 | local e=require"verse"; | |
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 | 6304 | local n="urn:xmpp:jingle:transports:ibb:1"; |
6305 | local o="http://jabber.org/protocol/ibb"; | |
6306 | assert(i.encode("This is a test.")=="VGhpcyBpcyBhIHRlc3Qu","Base64 encoding failed"); | |
6307 | assert(i.decode("VGhpcyBpcyBhIHRlc3Qu")=="This is a test.","Base64 decoding failed"); | |
6308 | local t=table.concat | |
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 | 6313 | t=e.eventable(t); |
6314 | return t; | |
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 | 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 | 6320 | self.sid=e or tostring(self):match("%x+$"); |
6321 | self.iseq=0; | |
6322 | self.oseq=0; | |
6323 | local e=function(e) | |
6324 | return self:feed(e) | |
6325 | end | |
6326 | self.feeder=e; | |
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 | 6332 | end |
6333 | end | |
6334 | function a:open(t) | |
6335 | self.stream:send_iq(e.iq{to=self.peer,type="set"} | |
6336 | :tag("open",{ | |
6337 | xmlns=o, | |
6338 | ["block-size"]=self.block, | |
6339 | sid=self.sid, | |
6340 | stanza=self.stanza | |
6341 | }) | |
6342 | ,function(e) | |
6343 | if t then | |
6344 | if e.attr.type~="error"then | |
6345 | t(true) | |
6346 | else | |
6347 | t(false,e:get_error()) | |
6348 | end | |
6349 | end | |
6350 | end); | |
6351 | end | |
6352 | function a:send(n) | |
6353 | local a=self.stanza; | |
6354 | local t; | |
6355 | if a=="iq"then | |
6356 | t=e.iq{type="set",to=self.peer} | |
6357 | elseif a=="message"then | |
6358 | t=e.message{to=self.peer} | |
6359 | end | |
6360 | local e=self.oseq; | |
6361 | self.oseq=e+1; | |
6362 | t:tag("data",{xmlns=o,sid=self.sid,seq=e}) | |
6363 | :text(i.encode(n)); | |
6364 | if a=="iq"then | |
6365 | self.stream:send_iq(t,function(e) | |
6366 | self:event(e.attr.type=="result"and"drained"or"error"); | |
6367 | end) | |
6368 | else | |
6369 | stream:send(t) | |
6370 | self:event("drained"); | |
6371 | end | |
6372 | end | |
6373 | function a:feed(t) | |
6374 | if t.attr.from~=self.peer then return end | |
6375 | local a=t[1]; | |
6376 | if a.attr.sid~=self.sid then return end | |
6377 | local n; | |
6378 | if a.name=="open"then | |
6379 | self:event("connected"); | |
6380 | self.stream:send(e.reply(t)) | |
6381 | return true | |
6382 | elseif a.name=="data"then | |
6383 | local o=t:get_child_text("data",o); | |
6384 | local a=tonumber(a.attr.seq); | |
6385 | local n=self.iseq; | |
6386 | if o and a then | |
6387 | if a~=n then | |
6388 | self.stream:send(e.error_reply(t,"cancel","not-acceptable","Wrong sequence. Packet lost?")) | |
6389 | self:close(); | |
6390 | self:event("error"); | |
6391 | return true; | |
6392 | end | |
6393 | self.iseq=a+1; | |
6394 | local a=i.decode(o); | |
6395 | if self.stanza=="iq"then | |
6396 | self.stream:send(e.reply(t)) | |
6397 | end | |
6398 | self:event("incoming-raw",a); | |
6399 | return true; | |
6400 | end | |
6401 | elseif a.name=="close"then | |
6402 | self.stream:send(e.reply(t)) | |
6403 | self:close(); | |
6404 | return true | |
6405 | end | |
6406 | end | |
6407 | function a:close() | |
6408 | self.stream:unhook("iq/"..o,self.feeder) | |
6409 | self:event("disconnected"); | |
6410 | end | |
6411 | function e.plugins.jingle_ibb(a) | |
6412 | a:hook("ready",function() | |
6413 | a:add_disco_feature(n); | |
6414 | end,10); | |
6415 | local t={}; | |
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 | 6418 | e.sid=self.sid or e.sid; |
6419 | e.stanza=self.stanza or e.stanza; | |
6420 | e.block=self.block or e.block; | |
6421 | e:initiate(self.peer,self.sid,self.stanza); | |
6422 | self.conn=e; | |
6423 | end | |
6424 | function t:generate_initiate() | |
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 | 6427 | self.sid=t; |
6428 | self.stanza='iq'; | |
6429 | self.block=2048; | |
6430 | local e=e.stanza("transport",{xmlns=n, | |
6431 | sid=self.sid,stanza=self.stanza,["block-size"]=self.block}); | |
6432 | return e; | |
6433 | end | |
6434 | function t:generate_accept(t) | |
6435 | print("ibb:generate_accept() as "..self.role); | |
6436 | local e=t.attr; | |
6437 | self.sid=e.sid or self.sid; | |
6438 | self.stanza=e.stanza or self.stanza; | |
6439 | self.block=e["block-size"]or self.block; | |
6440 | self:_setup(); | |
6441 | return t; | |
6442 | end | |
6443 | function t:connect(t) | |
6444 | if not self.conn then | |
6445 | self:_setup(); | |
6446 | end | |
6447 | local e=self.conn; | |
6448 | print("ibb:connect() as "..self.role); | |
6449 | if self.role=="initiator"then | |
6450 | e:open(function(a,...) | |
6451 | assert(a,table.concat({...},", ")); | |
6452 | t(e); | |
6453 | end); | |
6454 | else | |
6455 | t(e); | |
6456 | end | |
6457 | end | |
6458 | function t:info_received(e) | |
6459 | print("ibb:info_received()"); | |
6460 | end | |
6461 | function t:disconnect() | |
6462 | if self.conn then | |
6463 | self.conn:close() | |
6464 | end | |
6465 | end | |
6466 | function t:handle_accepted(e)end | |
6467 | local t={__index=t}; | |
6468 | a:hook("jingle/transport/"..n,function(e) | |
6469 | return setmetatable({ | |
6470 | role=e.role, | |
6471 | peer=e.peer, | |
6472 | stream=e.stream, | |
6473 | jingle=e, | |
6474 | },t); | |
6475 | end); | |
6476 | end | |
6477 | end) | |
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 | 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 | 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 | 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 | 6491 | local t=t:get_child("items"); |
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 | 6494 | for t in t:childtags("item")do |
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 | 6498 | item=t; |
6499 | }); | |
6500 | end | |
6501 | end | |
6502 | end | |
6503 | end); | |
6504 | return true; | |
6505 | end | |
6506 | function e:create(e,t,a) | |
6507 | return self:service(e):node(t):create(nil,a); | |
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 | 6514 | end |
6515 | local a={}; | |
6516 | local t={__index=a}; | |
6517 | function e:service(e) | |
6518 | return setmetatable({stream=self.stream,service=e},t) | |
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 | 6526 | end |
6527 | function a:subscriptions(a) | |
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 | 6532 | local e=e and e:get_child("subscriptions"); |
6533 | local o={}; | |
6534 | if e then | |
6535 | for t in e:childtags("subscription")do | |
6536 | local e=self:node(t.attr.node) | |
6537 | e.subscription=t; | |
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 | 6540 | end |
6541 | end | |
6542 | a(o); | |
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 | 6545 | end |
6546 | end or nil); | |
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 | 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 | 6565 | end |
6566 | end or nil); | |
6567 | end | |
6568 | function a:nodes(a) | |
6569 | self.stream:disco_items(self.service,nil,function(e,...) | |
6570 | if e then | |
6571 | for t=1,#e do | |
6572 | e[t]=self:node(e[t].node); | |
6573 | end | |
6574 | end | |
6575 | a(e,...) | |
6576 | end); | |
6577 | end | |
6578 | local e={}; | |
6579 | local o={__index=e}; | |
6580 | function a:node(e) | |
6581 | return setmetatable({stream=self.stream,service=self.service,node=e},o) | |
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 | 6584 | local t=self:service(t); |
6585 | return e and t:node(e)or t; | |
6586 | end | |
6587 | function e:hook(a,o) | |
6588 | self._hooks=self._hooks or setmetatable({},{__mode='kv'}); | |
6589 | local function t(e) | |
6590 | if(not e.service or e.from==self.service)and e.node==self.node then | |
6591 | return a(e) | |
6592 | end | |
6593 | end | |
6594 | self._hooks[a]=t; | |
6595 | self.stream:hook("pubsub/event",t,o); | |
6596 | return t; | |
6597 | end | |
6598 | function e:unhook(e) | |
6599 | if e then | |
6600 | local e=self._hooks[e]; | |
6601 | self.stream:unhook("pubsub/event",e); | |
6602 | elseif self._hooks then | |
6603 | for e in pairs(self._hooks)do | |
6604 | self.stream:unhook("pubsub/event",e); | |
6605 | end | |
6606 | end | |
6607 | end | |
6608 | function e:create(e,a) | |
6609 | if e~=nil then | |
6610 | error("Not implemented yet."); | |
6611 | else | |
6612 | self.stream:send_iq(t("set",self.service,nil,"create",self.node),a); | |
6613 | end | |
6614 | end | |
6615 | function e:configure(e,a) | |
6616 | if e~=nil then | |
6617 | error("Not implemented yet."); | |
6618 | end | |
6619 | self.stream:send_iq(t("set",self.service,nil,e==nil and"default"or"configure",self.node),a); | |
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 | 6622 | if a~=nil then |
6623 | error("Node configuration is not implemented yet."); | |
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 | 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 | 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 | 6632 | error("Subscription configuration is not implemented yet."); |
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 | 6636 | end |
6637 | function e:subscription(e) | |
6638 | error("Not implemented yet."); | |
6639 | end | |
6640 | function e:affiliation(e) | |
6641 | error("Not implemented yet."); | |
6642 | end | |
6643 | function e:unsubscribe(e,a) | |
6644 | e=e or self.subscribed_jid or self.stream.jid; | |
6645 | self.stream:send_iq(t("set",self.service,nil,"unsubscribe",self.node,e) | |
6646 | ,a); | |
6647 | end | |
6648 | function e:configure_subscription(e,e) | |
6649 | error("Not implemented yet."); | |
6650 | end | |
6651 | function e:items(a,e) | |
6652 | if a then | |
6653 | self.stream:send_iq(t("get",self.service,nil,"items",self.node) | |
6654 | ,e); | |
6655 | else | |
6656 | self.stream:disco_items(self.service,self.node,e); | |
6657 | end | |
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 | 6662 | end |
6663 | function e:retract(e,a) | |
6664 | self.stream:send_iq(t("set",self.service,nil,"retract",self.node,nil,e) | |
6665 | ,a); | |
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 | 6671 | end |
6672 | function e:delete(a,e) | |
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 | 6675 | ,e); |
6676 | end | |
6677 | end) | |
6678 | package.preload['verse.plugins.pep']=(function(...) | |
6679 | local e=require"verse"; | |
6680 | local t="http://jabber.org/protocol/pubsub"; | |
6681 | local t=t.."#event"; | |
6682 | function e.plugins.pep(e) | |
6683 | e:add_plugin("disco"); | |
6684 | e:add_plugin("pubsub"); | |
6685 | e.pep={}; | |
6686 | e:hook("pubsub/event",function(t) | |
6687 | return e:event("pep/"..t.node,{from=t.from,item=t.item.tags[1]}); | |
6688 | end); | |
6689 | function e:hook_pep(t,i,o) | |
6690 | local a=e.events._handlers["pep/"..t]; | |
6691 | if not(a)or#a==0 then | |
6692 | e:add_disco_feature(t.."+notify"); | |
6693 | end | |
6694 | e:hook("pep/"..t,i,o); | |
6695 | end | |
6696 | function e:unhook_pep(t,a) | |
6697 | e:unhook("pep/"..t,a); | |
6698 | local a=e.events._handlers["pep/"..t]; | |
6699 | if not(a)or#a==0 then | |
6700 | e:remove_disco_feature(t.."+notify"); | |
6701 | end | |
6702 | end | |
6703 | function e:publish_pep(t,a) | |
6704 | return e.pubsub:service(nil):node(a or t.attr.xmlns):publish(nil,nil,t) | |
6705 | end | |
6706 | end | |
6707 | end) | |
6708 | package.preload['verse.plugins.adhoc']=(function(...) | |
6709 | local o=require"verse"; | |
6710 | local n=require"lib.adhoc"; | |
6711 | local t="http://jabber.org/protocol/commands"; | |
6712 | local s="jabber:x:data"; | |
6713 | local a={}; | |
6714 | a.__index=a; | |
6715 | local i={}; | |
6716 | function o.plugins.adhoc(e) | |
6717 | e:add_plugin("disco"); | |
6718 | e:add_disco_feature(t); | |
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 | 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 | 6725 | end |
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 | 6728 | end); |
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 | 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 | 6734 | },a); |
6735 | return e:execute(); | |
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 | 6738 | if not(e)or e=="user"then return true;end |
6739 | if type(e)=="function"then | |
6740 | return e(t); | |
6741 | end | |
6742 | end | |
6743 | function e:add_adhoc_command(o,a,h,s) | |
6744 | i[a]=n.new(o,a,h,s); | |
6745 | e:add_disco_item({jid=e.jid,node=a,name=o},t); | |
6746 | return i[a]; | |
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 | 6756 | :tag("note",{type="error"}):text("You don't have permission to execute this command"))); |
6757 | return true | |
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 | 6760 | end |
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 | 6766 | end |
6767 | end); | |
6768 | end | |
6769 | function a:_process_response(e) | |
6770 | if e.attr.type=="error"then | |
6771 | self.status="canceled"; | |
6772 | self.callback(self,{}); | |
6773 | return; | |
6774 | end | |
6775 | local e=e:get_child("command",t); | |
6776 | self.status=e.attr.status; | |
6777 | self.sessionid=e.attr.sessionid; | |
6778 | self.form=e:get_child("x",s); | |
6779 | self.note=e:get_child("note"); | |
6780 | self.callback(self); | |
6781 | end | |
6782 | function a:execute() | |
6783 | local e=o.iq({to=self.jid,type="set"}) | |
6784 | :tag("command",{xmlns=t,node=self.command}); | |
6785 | self.stream:send_iq(e,function(e) | |
6786 | self:_process_response(e); | |
6787 | end); | |
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 | 6791 | :tag("command",{ |
6792 | xmlns=t, | |
6793 | node=self.command, | |
6794 | sessionid=self.sessionid | |
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 | 6798 | self:_process_response(e); |
6799 | end); | |
6800 | end | |
6801 | end) | |
6802 | package.preload['verse.plugins.presence']=(function(...) | |
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 | 6809 | end |
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 | 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 | 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 | 6830 | end |
6831 | end | |
6832 | end) | |
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 | 6840 | if e then |
6841 | if e.name==o and e.attr and e.attr.xmlns==i then | |
6842 | t:add_child(e); | |
6843 | else | |
6844 | t:tag(o,{xmlns=i}) | |
6845 | :add_child(e); | |
6846 | end | |
6847 | end | |
6848 | self:send_iq(t,n); | |
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 | 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 | 6857 | local e=t:get_child(e,o); |
6858 | i(e); | |
6859 | end | |
6860 | end); | |
6861 | end | |
6862 | end | |
6863 | end) | |
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 | 6866 | local d=require"util.jid".bare; |
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 | 6872 | local e={ |
6873 | items={}; | |
6874 | ver=""; | |
6875 | }; | |
6876 | t.roster=e; | |
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 | 6880 | end |
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 | 6884 | for a,t in pairs(t)do |
6885 | if a~="groups"then | |
6886 | e.attr[a]=t; | |
6887 | else | |
6888 | for a=1,#t do | |
6889 | e:tag("group"):text(t[a]):up(); | |
6890 | end | |
6891 | end | |
6892 | end | |
6893 | return e; | |
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 | 6896 | local e={}; |
6897 | local a={}; | |
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 | 6900 | if t~="xmlns"then |
6901 | e[t]=a | |
6902 | end | |
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 | 6906 | end |
6907 | return e; | |
6908 | end | |
6909 | function e:load(t) | |
6910 | e.ver,e.items=t.ver,t.items; | |
6911 | end | |
6912 | function e:dump() | |
6913 | return{ | |
6914 | ver=e.ver, | |
6915 | items=e.items, | |
6916 | }; | |
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 | 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 | 6923 | t:send_iq(a,function(t) |
6924 | if not e then return end | |
6925 | if t.attr.type=="result"then | |
6926 | e(true); | |
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 | 6929 | end |
6930 | end); | |
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 | 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 | 6939 | function(e) |
6940 | if not n then return end | |
6941 | if e.attr.type=="result"then | |
6942 | n(true); | |
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 | 6945 | end |
6946 | end); | |
6947 | end | |
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 | 6950 | e.items[t.jid]=t; |
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 | 6953 | local a=e.items[t]; |
6954 | e.items[t]=nil; | |
6955 | return a; | |
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 | 6959 | function(t) |
6960 | if t.attr.type=="result"then | |
6961 | local t=t:get_child("query",a); | |
6962 | if t then | |
6963 | e.items={}; | |
6964 | for t in t:childtags("item")do | |
6965 | h(t) | |
6966 | end | |
6967 | e.ver=t.attr.ver or""; | |
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 | 6972 | end |
6973 | end); | |
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 | 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 | 6986 | else |
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 | 6990 | end |
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 | 6997 | return true; |
6998 | end | |
6999 | end); | |
7000 | end | |
7001 | end) | |
7002 | package.preload['verse.plugins.register']=(function(...) | |
7003 | local t=require"verse"; | |
7004 | local o="jabber:iq:register"; | |
7005 | function t.plugins.register(e) | |
7006 | local function a(i) | |
7007 | if i:get_child("register","http://jabber.org/features/iq-register")then | |
7008 | local t=t.iq({to=e.host_,type="set"}) | |
7009 | :tag("query",{xmlns=o}) | |
7010 | :tag("username"):text(e.username):up() | |
7011 | :tag("password"):text(e.password):up(); | |
7012 | if e.register_email then | |
7013 | t:tag("email"):text(e.register_email):up(); | |
7014 | end | |
7015 | e:send_iq(t,function(t) | |
7016 | if t.attr.type=="result"then | |
7017 | e:event("registration-success"); | |
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 | 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 | 7022 | end |
7023 | end); | |
7024 | else | |
7025 | e:debug("In-band registration not offered by server"); | |
7026 | e:event("registration-failure",{condition="service-unavailable"}); | |
7027 | end | |
7028 | e:unhook("stream-features",a); | |
7029 | return true; | |
7030 | end | |
7031 | e:hook("stream-features",a,310); | |
7032 | end | |
7033 | end) | |
7034 | package.preload['verse.plugins.groupchat']=(function(...) | |
7035 | local i=require"verse"; | |
7036 | local e=require"events"; | |
7037 | local n=require"util.jid"; | |
7038 | local a={}; | |
7039 | a.__index=a; | |
7040 | local h="urn:xmpp:delay"; | |
7041 | local s="http://jabber.org/protocol/muc"; | |
7042 | function i.plugins.groupchat(o) | |
7043 | o:add_plugin("presence") | |
7044 | o.rooms={}; | |
7045 | o:hook("stanza",function(e) | |
7046 | local a=n.bare(e.attr.from); | |
7047 | if not a then return end | |
7048 | local t=o.rooms[a] | |
7049 | if not t and e.attr.to and a then | |
7050 | t=o.rooms[e.attr.to.." "..a] | |
7051 | end | |
7052 | if t and t.opts.source and e.attr.to~=t.opts.source then return end | |
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 | 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 | 7057 | local a={ |
7058 | room_jid=a; | |
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 | 7062 | body=n; |
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 | 7065 | }; |
7066 | local t=t:event(e.name,a); | |
7067 | return t or(e.name=="message")or nil; | |
7068 | end | |
7069 | end,500); | |
7070 | function o:join_room(n,h,t) | |
7071 | if not h then | |
7072 | return false,"no nickname supplied" | |
7073 | end | |
7074 | t=t or{}; | |
7075 | local e=setmetatable(i.eventable{ | |
7076 | stream=o,jid=n,nick=h, | |
7077 | subject=nil, | |
7078 | occupants={}, | |
7079 | opts=t, | |
7080 | },a); | |
7081 | if t.source then | |
7082 | self.rooms[t.source.." "..n]=e; | |
7083 | else | |
7084 | self.rooms[n]=e; | |
7085 | end | |
7086 | local a=e.occupants; | |
7087 | e:hook("presence",function(o) | |
7088 | local t=o.nick or h; | |
7089 | if not a[t]and o.stanza.attr.type~="unavailable"then | |
7090 | a[t]={ | |
7091 | nick=t; | |
7092 | jid=o.stanza.attr.from; | |
7093 | presence=o.stanza; | |
7094 | }; | |
7095 | local o=o.stanza:get_child("x",s.."#user"); | |
7096 | if o then | |
7097 | local e=o:get_child("item"); | |
7098 | if e and e.attr then | |
7099 | a[t].real_jid=e.attr.jid; | |
7100 | a[t].affiliation=e.attr.affiliation; | |
7101 | a[t].role=e.attr.role; | |
7102 | end | |
7103 | end | |
7104 | if t==e.nick then | |
7105 | e.stream:event("groupchat/joined",e); | |
7106 | else | |
7107 | e:event("occupant-joined",a[t]); | |
7108 | end | |
7109 | elseif a[t]and o.stanza.attr.type=="unavailable"then | |
7110 | if t==e.nick then | |
7111 | e.stream:event("groupchat/left",e); | |
7112 | if e.opts.source then | |
7113 | self.rooms[e.opts.source.." "..n]=nil; | |
7114 | else | |
7115 | self.rooms[n]=nil; | |
7116 | end | |
7117 | else | |
7118 | a[t].presence=o.stanza; | |
7119 | e:event("occupant-left",a[t]); | |
7120 | a[t]=nil; | |
7121 | end | |
7122 | end | |
7123 | end); | |
7124 | e:hook("message",function(a) | |
7125 | local t=a.stanza:get_child_text("subject"); | |
7126 | if not t then return end | |
7127 | t=#t>0 and t or nil; | |
7128 | if t~=e.subject then | |
7129 | local o=e.subject; | |
7130 | e.subject=t; | |
7131 | return e:event("subject-changed",{from=o,to=t,by=a.sender,event=a}); | |
7132 | end | |
7133 | end,2e3); | |
7134 | local t=i.presence():tag("x",{xmlns=s}):reset(); | |
7135 | self:event("pre-groupchat/joining",t); | |
7136 | e:send(t) | |
7137 | self:event("groupchat/joining",e); | |
7138 | return e; | |
7139 | end | |
7140 | o:hook("presence-out",function(e) | |
7141 | if not e.attr.to then | |
7142 | for a,t in pairs(o.rooms)do | |
7143 | t:send(e); | |
7144 | end | |
7145 | e.attr.to=nil; | |
7146 | end | |
7147 | end); | |
7148 | end | |
7149 | function a:send(e) | |
7150 | if e.name=="message"and not e.attr.type then | |
7151 | e.attr.type="groupchat"; | |
7152 | end | |
7153 | if e.name=="presence"then | |
7154 | e.attr.to=self.jid.."/"..self.nick; | |
7155 | end | |
7156 | if e.attr.type=="groupchat"or not e.attr.to then | |
7157 | e.attr.to=self.jid; | |
7158 | end | |
7159 | if self.opts.source then | |
7160 | e.attr.from=self.opts.source | |
7161 | end | |
7162 | self.stream:send(e); | |
7163 | end | |
7164 | function a:send_message(e) | |
7165 | self:send(i.message():tag("body"):text(e)); | |
7166 | end | |
7167 | function a:set_subject(e) | |
7168 | self:send(i.message():tag("subject"):text(e)); | |
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 | 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 | 7179 | self:send(i.iq({type="set"}) |
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 | 7182 | :tag("reason"):text(o or"")); |
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 | 7189 | end |
7190 | function a:kick(e,t) | |
7191 | self:set_role(e,"none",t); | |
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 | 7195 | end |
7196 | end) | |
7197 | package.preload['verse.plugins.vcard']=(function(...) | |
7198 | local i=require"verse"; | |
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 | 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 | 7211 | end |
7212 | end or nil); | |
7213 | end | |
7214 | function a:set_vcard(e,n) | |
7215 | local t; | |
7216 | if type(e)=="table"and e.name then | |
7217 | t=e; | |
7218 | elseif type(e)=="string"then | |
7219 | t=o.to_xep54(o.from_text(e)[1]); | |
7220 | elseif type(e)=="table"then | |
7221 | t=o.to_xep54(e); | |
7222 | error("Converting a table to vCard not implemented") | |
7223 | end | |
7224 | if not t then return false end | |
7225 | a:debug("setting vcard to %s",tostring(t)); | |
7226 | a:send_iq(i.iq({type="set"}) | |
7227 | :add_child(t),n); | |
7228 | end | |
7229 | end | |
7230 | end) | |
7231 | package.preload['verse.plugins.vcard_update']=(function(...) | |
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 | 7235 | local e,t=pcall(function() |
7236 | local e=require("util.encodings").base64.decode; | |
7237 | assert(e("SGVsbG8=")=="Hello") | |
7238 | return e; | |
7239 | end); | |
7240 | if not e then | |
7241 | e,t=pcall(function()return require("mime").unb64;end); | |
7242 | if not e then | |
7243 | error("Could not find a base64 decoder") | |
7244 | end | |
7245 | end | |
7246 | local h=t; | |
7247 | function n.plugins.vcard_update(e) | |
7248 | e:add_plugin("vcard"); | |
7249 | e:add_plugin("presence"); | |
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 | 7252 | local a; |
7253 | for e=1,#o do | |
7254 | if o[e].name=="PHOTO"then | |
7255 | a=o[e][1]; | |
7256 | break | |
7257 | end | |
7258 | end | |
7259 | if a then | |
7260 | local a=s(h(a),true); | |
7261 | t=n.stanza("x",{xmlns=i}) | |
7262 | :tag("photo"):text(a); | |
7263 | e:resend_presence() | |
7264 | else | |
7265 | t=nil; | |
7266 | end | |
7267 | end | |
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 | 7270 | if a then return;end |
7271 | a=true; | |
7272 | e:get_vcard(nil,function(t) | |
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 | 7275 | end |
7276 | e:event("ready"); | |
7277 | end); | |
7278 | return true; | |
7279 | end,3); | |
7280 | e:hook("presence-out",function(e) | |
7281 | if t and not e:get_child("x",i)then | |
7282 | e:add_child(t); | |
7283 | end | |
7284 | end,10); | |
7285 | end | |
7286 | end) | |
7287 | package.preload['verse.plugins.carbons']=(function(...) | |
7288 | local o=require"verse"; | |
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 | 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 | 7294 | function o.plugins.carbons(e) |
7295 | local t={}; | |
7296 | t.enabled=false; | |
7297 | e.carbons=t; | |
7298 | function t:enable(i) | |
7299 | e:send_iq(o.iq{type="set"} | |
7300 | :tag("enable",{xmlns=a}) | |
7301 | ,function(e) | |
7302 | local e=e.attr.type=="result"; | |
7303 | if e then | |
7304 | t.enabled=true; | |
7305 | end | |
7306 | if i then | |
7307 | i(e); | |
7308 | end | |
7309 | end or nil); | |
7310 | end | |
7311 | function t:disable(i) | |
7312 | e:send_iq(o.iq{type="set"} | |
7313 | :tag("disable",{xmlns=a}) | |
7314 | ,function(e) | |
7315 | local e=e.attr.type=="result"; | |
7316 | if e then | |
7317 | t.enabled=false; | |
7318 | end | |
7319 | if i then | |
7320 | i(e); | |
7321 | end | |
7322 | end or nil); | |
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 | 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 | 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 | 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 | 7333 | local a=t and t:get_child("message","jabber:client"); |
7334 | local t=t:get_child("delay","urn:xmpp:delay"); | |
7335 | local t=t and t.attr.stamp; | |
7336 | t=t and s(t); | |
7337 | if a then | |
7338 | return e:event("carbon",{ | |
7339 | dir=o, | |
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 | 7342 | }); |
7343 | end | |
7344 | end | |
7345 | end,1); | |
7346 | end | |
7347 | end) | |
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 | 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 | 7358 | local r=require"util.rsm"; |
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 | 7362 | {name="with";type="jid-single";}; |
7363 | {name="start";type="text-single"}; | |
7364 | {name="end";type="text-single";}; | |
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 | 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 | 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 | 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 | 7395 | return true |
7396 | end | |
7397 | end | |
7398 | self:hook("message",n,1); | |
7399 | self:send_iq(o,function(e) | |
7400 | if e.attr.type=="error"then | |
7401 | self:warn(table.concat({e:get_error()}," ")) | |
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 | 7404 | end |
7405 | return true | |
7406 | end); | |
7407 | end | |
7408 | local i={ | |
7409 | always=true,[true]="always", | |
7410 | never=false,[false]="never", | |
7411 | roster="roster", | |
7412 | } | |
7413 | local function h(t) | |
7414 | local e={}; | |
7415 | local a=t.attr.default; | |
7416 | if a then | |
7417 | e[false]=i[a]; | |
7418 | end | |
7419 | local a=t:get_child("always"); | |
7420 | if a then | |
7421 | for t in a:childtags("jid")do | |
7422 | local t=t:get_text(); | |
7423 | e[t]=true; | |
7424 | end | |
7425 | end | |
7426 | local t=t:get_child("never"); | |
7427 | if t then | |
7428 | for t in t:childtags("jid")do | |
7429 | local t=t:get_text(); | |
7430 | e[t]=false; | |
7431 | end | |
7432 | end | |
7433 | return e; | |
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 | 7451 | function(e) |
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 | 7457 | end |
7458 | end); | |
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 | 7462 | end |
7463 | end | |
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 | 7475 | local function e(e) |
7476 | return e and(e:gsub("%W",function(e) | |
7477 | if e~=" "then | |
7478 | return t("%%%02x",e:byte()); | |
7479 | else | |
7480 | return"+"; | |
7481 | end | |
7482 | end)); | |
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 | 7485 | local a={}; |
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 | 7488 | o(a,e(t.name).."="..e(t.value)); |
7489 | end | |
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 | 7492 | o(a,e(t).."="..e(i)); |
7493 | end | |
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 | 7500 | for t,e in e:gmatch("([^=&]*)=([^&]*)")do |
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 | 7762 | if not e.parser then |
7763 | local function a(t) | |
7764 | if e.callback then | |
7765 | e.callback(t or"connection-closed",0,e); | |
7766 | e.callback=nil; | |
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 | 7780 | end |
7781 | local function t() | |
7782 | return e; | |
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 | 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 | 7800 | return nil,"invalid-url"; |
7801 | end | |
7802 | if not e.path then | |
7803 | e.path="/"; | |
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 | 7825 | ["User-Agent"]="Prosody XMPP Server"; |
7826 | }; | |
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 | 7829 | end |
7830 | if t then | |
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 | 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 | 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 | 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 | 7877 | return e; |
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 | 7903 | end) |
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 | 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 | 7909 | local e=setmetatable({},{__index=verse.stream_mt}); |
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 | 7914 | function verse.new_bosh(a,t) |
7915 | local t={ | |
7916 | bosh_conn_pool={}; | |
7917 | bosh_waiting_requests={}; | |
7918 | bosh_rid=math.random(1,999999); | |
7919 | bosh_outgoing_buffer={}; | |
7920 | bosh_url=t; | |
7921 | conn={}; | |
7922 | }; | |
7923 | function t:reopen() | |
7924 | self.bosh_need_restart=true; | |
7925 | self:flush(); | |
7926 | end | |
7927 | local t=verse.new(a,t); | |
7928 | return setmetatable(t,e); | |
7929 | end | |
7930 | function e:connect() | |
7931 | self:_send_session_request(); | |
7932 | end | |
7933 | function e:send(e) | |
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 | 7936 | self:flush(); |
7937 | end | |
7938 | function e:flush() | |
7939 | if self.connected | |
7940 | and#self.bosh_waiting_requests<self.bosh_max_requests | |
7941 | and(#self.bosh_waiting_requests==0 | |
7942 | or#self.bosh_outgoing_buffer>0 | |
7943 | or self.bosh_need_restart)then | |
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 | 7952 | else |
7953 | self:debug("Decided not to flush."); | |
7954 | end | |
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 | 7958 | if e~=0 then |
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 | 7961 | end |
7962 | local e=os.time(); | |
7963 | if not self.inactive_since then | |
7964 | self.inactive_since=e; | |
7965 | elseif e-self.inactive_since>self.bosh_max_inactivity then | |
7966 | return self:_disconnected(); | |
7967 | else | |
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 | 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 | 7976 | break; |
7977 | end | |
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 | 7980 | end); |
7981 | end); | |
7982 | if e then | |
7983 | table.insert(self.bosh_waiting_requests,e); | |
7984 | else | |
7985 | self:warn("Request failed instantly: %s",t); | |
7986 | end | |
7987 | end | |
7988 | function e:_disconnected() | |
7989 | self.connected=nil; | |
7990 | self:event("disconnected"); | |
7991 | end | |
7992 | function e:_send_session_request() | |
7993 | local e=self:_make_body(); | |
7994 | e.attr.hold="1"; | |
7995 | e.attr.wait="60"; | |
7996 | e.attr["xml:lang"]="en"; | |
7997 | e.attr.ver="1.6"; | |
7998 | e.attr.from=self.jid; | |
7999 | e.attr.to=self.host; | |
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 | 8002 | if t==0 then |
8003 | return self:_disconnected(); | |
8004 | end | |
8005 | local e=self:_parse_response(e) | |
8006 | if not e then | |
8007 | self:warn("Invalid session creation response"); | |
8008 | self:_disconnected(); | |
8009 | return; | |
8010 | end | |
8011 | self.bosh_sid=e.attr.sid; | |
8012 | self.bosh_wait=tonumber(e.attr.wait); | |
8013 | self.bosh_hold=tonumber(e.attr.hold); | |
8014 | self.bosh_max_inactivity=tonumber(e.attr.inactivity); | |
8015 | self.bosh_max_requests=tonumber(e.attr.requests)or self.bosh_hold; | |
8016 | self.connected=true; | |
8017 | self:event("connected"); | |
8018 | self:_handle_response_payload(e); | |
8019 | end); | |
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 | 8022 | if self.bosh_waiting_requests[1]~=e then |
8023 | self:warn("Server replied to request that wasn't the oldest"); | |
8024 | for t,a in ipairs(self.bosh_waiting_requests)do | |
8025 | if a==e then | |
8026 | self.bosh_waiting_requests[t]=nil; | |
8027 | break; | |
8028 | end | |
8029 | end | |
8030 | else | |
8031 | table.remove(self.bosh_waiting_requests,1); | |
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 | 8034 | if e then |
8035 | self:_handle_response_payload(e); | |
8036 | end | |
8037 | self:flush(); | |
8038 | end | |
8039 | function e:_handle_response_payload(t) | |
8040 | local e=t.tags; | |
8041 | for t=1,#e do | |
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 | 8044 | self:event("stream-"..e.name,e); |
8045 | elseif e.attr.xmlns then | |
8046 | self:event("stream/"..e.attr.xmlns,e); | |
8047 | else | |
8048 | self:event("stanza",e); | |
8049 | end | |
8050 | end | |
8051 | if t.attr.type=="terminate"then | |
8052 | self:_disconnected({reason=t.attr.condition}); | |
8053 | end | |
8054 | end | |
8055 | local a={ | |
8056 | stream_ns="http://jabber.org/protocol/httpbind",stream_tag="body", | |
8057 | default_ns="jabber:client", | |
8058 | streamopened=function(e,t)e.notopen=nil;e.payload=verse.stanza("body",t);return true;end; | |
8059 | handlestanza=function(t,e)t.payload:add_child(e);end; | |
8060 | }; | |
8061 | function e:_parse_response(e) | |
8062 | self:debug("Parsing response: %s",e); | |
8063 | if e==nil then | |
8064 | self:debug("%s",debug.traceback()); | |
8065 | self:_disconnected(); | |
8066 | return; | |
8067 | end | |
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 | 8070 | a:feed(e); |
8071 | return t.payload; | |
8072 | end | |
8073 | function e:_make_body() | |
8074 | self.bosh_rid=self.bosh_rid+1; | |
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 | 8077 | content="text/xml; charset=utf-8"; |
8078 | sid=self.bosh_sid; | |
8079 | rid=self.bosh_rid; | |
8080 | }); | |
8081 | if self.bosh_need_restart then | |
8082 | self.bosh_need_restart=nil; | |
8083 | e.attr.restart='true'; | |
8084 | end | |
8085 | return e; | |
8086 | end | |
8087 | end) | |
8088 | package.preload['verse.client']=(function(...) | |
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 | 8093 | local e=require"lxp"; |
8094 | local a=require"util.stanza"; | |
8095 | t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply= | |
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 | 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 | 8100 | return t.priority<e.priority or(t.priority==e.priority and t.weight>e.weight); |
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 | 8103 | stream_ns=n, |
8104 | stream_tag="stream", | |
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 | 8107 | e.stream_id=t.id; |
8108 | if not e:event("opened",t)then | |
8109 | e.notopen=nil; | |
8110 | end | |
8111 | return true; | |
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 | 8114 | e.notopen=true; |
8115 | if not e.closed then | |
8116 | e:send("</stream:stream>"); | |
8117 | e.closed=true; | |
8118 | end | |
8119 | e:event("closed"); | |
8120 | return e:close("stream closed") | |
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 | 8123 | if e.attr.xmlns==n then |
8124 | return t:event("stream-"..e.name,e); | |
8125 | elseif e.attr.xmlns then | |
8126 | return t:event("stream/"..e.attr.xmlns,e); | |
8127 | end | |
8128 | return t:event("stanza",e); | |
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 | 8131 | if a:event(t,e)==nil then |
8132 | if e then | |
8133 | local t=e:get_child(nil,"urn:ietf:params:xml:ns:xmpp-streams"); | |
8134 | local e=e:get_child_text("text","urn:ietf:params:xml:ns:xmpp-streams"); | |
8135 | error(t.name..(e and": "..e or"")); | |
8136 | else | |
8137 | error(e and e.name or t or"unknown-error"); | |
8138 | end | |
8139 | end | |
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 | 8142 | if self.stream then |
8143 | self.stream:reset(); | |
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 | 8146 | end |
8147 | self.notopen=true; | |
8148 | return true; | |
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 | 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 | 8153 | self:add_plugin("tls"); |
8154 | self:add_plugin("sasl"); | |
8155 | self:add_plugin("bind"); | |
8156 | self:add_plugin("session"); | |
8157 | function self.data(t,e) | |
8158 | local a,t=self.stream:feed(e); | |
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 | 8161 | self:close("xml-not-well-formed"); |
8162 | end | |
8163 | self:hook("connected",function()self:reopen();end); | |
8164 | self:hook("incoming-raw",function(e)return self.data(self.conn,e);end); | |
8165 | self.curr_id=0; | |
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 | 8172 | return true; |
8173 | end | |
8174 | end); | |
8175 | self:hook("stanza",function(e) | |
8176 | local a; | |
8177 | if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then | |
8178 | if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then | |
8179 | local o=e.tags[1]and e.tags[1].attr.xmlns; | |
8180 | if o then | |
8181 | a=self:event("iq/"..o,e); | |
8182 | if not a then | |
8183 | a=self:event("iq",e); | |
8184 | end | |
8185 | end | |
8186 | if a==nil then | |
8187 | self:send(t.error_reply(e,"cancel","service-unavailable")); | |
8188 | return true; | |
8189 | end | |
8190 | else | |
8191 | a=self:event(e.name,e); | |
8192 | end | |
8193 | end | |
8194 | return a; | |
8195 | end,-1); | |
8196 | self:hook("outgoing",function(e) | |
8197 | if e.name then | |
8198 | self:event("stanza-out",e); | |
8199 | end | |
8200 | end); | |
8201 | self:hook("stanza-out",function(e) | |
8202 | if not e.attr.xmlns then | |
8203 | self:event(e.name.."-out",e); | |
8204 | end | |
8205 | end); | |
8206 | local function e() | |
8207 | self:event("ready"); | |
8208 | end | |
8209 | self:hook("session-success",e,-1) | |
8210 | self:hook("bind-success",e,-1); | |
8211 | local t=self.close; | |
8212 | function self:close(e) | |
8213 | self.close=t; | |
8214 | if not self.closed then | |
8215 | self:send("</stream:stream>"); | |
8216 | self.closed=true; | |
8217 | else | |
8218 | return self:close(e); | |
8219 | end | |
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 | 8222 | self:connect(self.connect_host or self.host,self.connect_port or 5222); |
8223 | end | |
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 | 8227 | local e={}; |
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 | 8230 | table.insert(e,t.srv); |
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 | 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 | 8237 | self:debug("Best record found, will connect to %s:%d",self.connect_host or self.host,self.connect_port or 5222); |
8238 | end | |
8239 | self:hook("disconnected",function() | |
8240 | if self.srv_hosts and self.srv_choice<#self.srv_hosts then | |
8241 | self.srv_choice=self.srv_choice+1; | |
8242 | local e=e[self.srv_choice]; | |
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 | 8245 | return true; |
8246 | end | |
8247 | end,1e3); | |
8248 | self:hook("connected",function() | |
8249 | self.srv_hosts=nil; | |
8250 | end,1e3); | |
8251 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8252 | t(); |
12 | 8253 | end,"_xmpp-client._tcp."..(self.host)..".","SRV"); |
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 | 8259 | self:reset(); |
8260 | self:send(a.stanza("stream:stream",{to=self.host,["xmlns:stream"]='http://etherx.jabber.org/streams', | |
8261 | xmlns="jabber:client",version="1.0"}):top_tag()); | |
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 | 8264 | local t=self:new_id(); |
8265 | self.tracked_iqs[t]=a; | |
8266 | e.attr.id=t; | |
8267 | self:send(e); | |
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 | 8270 | self.curr_id=self.curr_id+1; |
8271 | return tostring(self.curr_id); | |
8272 | end | |
8273 | end) | |
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 | 8277 | local d=require"util.jid".split; |
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 | 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 | 8283 | local h=require"util.xmppstream".new; |
8284 | local s="http://etherx.jabber.org/streams"; | |
8285 | local i="jabber:component:accept"; | |
8286 | local n={ | |
8287 | stream_ns=s, | |
8288 | stream_tag="stream", | |
8289 | default_ns=i}; | |
8290 | function n.streamopened(e,t) | |
8291 | e.stream_id=t.id; | |
8292 | if not e:event("opened",t)then | |
8293 | e.notopen=nil; | |
8294 | end | |
8295 | return true; | |
8296 | end | |
8297 | function n.streamclosed(e) | |
8298 | return e:event("closed"); | |
8299 | end | |
8300 | function n.handlestanza(t,e) | |
8301 | if e.attr.xmlns==s then | |
8302 | return t:event("stream-"..e.name,e); | |
8303 | elseif e.attr.xmlns or e.name=="handshake"then | |
8304 | return t:event("stream/"..(e.attr.xmlns or i),e); | |
8305 | end | |
8306 | return t:event("stanza",e); | |
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 | 8309 | if self.stream then |
8310 | self.stream:reset(); | |
8311 | else | |
8312 | self.stream=h(self,n); | |
8313 | end | |
8314 | self.notopen=true; | |
8315 | return true; | |
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 | 8318 | self.jid,self.password=e,n; |
8319 | self.username,self.host,self.resource=d(e); | |
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 | 8325 | end |
8326 | self:hook("incoming-raw",function(e)return self.data(self.conn,e);end); | |
8327 | self.curr_id=0; | |
8328 | self.tracked_iqs={}; | |
8329 | self:hook("stanza",function(e) | |
8330 | local t,a=e.attr.id,e.attr.type; | |
8331 | if t and e.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[t]then | |
8332 | self.tracked_iqs[t](e); | |
8333 | self.tracked_iqs[t]=nil; | |
8334 | return true; | |
8335 | end | |
8336 | end); | |
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 | 8339 | if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then |
8340 | if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then | |
8341 | local o=e.tags[1]and e.tags[1].attr.xmlns; | |
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 | 8350 | return true; |
8351 | end | |
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 | 8357 | end,-1); |
8358 | self:hook("opened",function(e) | |
8359 | print(self.jid,self.stream_id,e.id); | |
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 | 8362 | self:hook("stream/"..i,function(e) |
8363 | if e.name=="handshake"then | |
8364 | self:event("authentication-success"); | |
8365 | end | |
8366 | end); | |
8367 | end); | |
8368 | local function e() | |
8369 | self:event("ready"); | |
8370 | end | |
8371 | self:hook("authentication-success",e,-1); | |
8372 | self:connect(self.connect_host or self.host,self.connect_port or 5347); | |
8373 | self:reopen(); | |
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 | 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 | 8378 | xmlns=i,version="1.0"}):top_tag()); |
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 | 8381 | if not self.notopen then |
8382 | self:send("</stream:stream>"); | |
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 | 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 | 8389 | local e=self:new_id(); |
8390 | self.tracked_iqs[e]=a; | |
8391 | t.attr.id=e; | |
8392 | self:send(t); | |
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 | 8395 | self.curr_id=self.curr_id+1; |
8396 | return tostring(self.curr_id); | |
8397 | end | |
8398 | end) | |
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 | 8401 | pcall(require,"ssl"); |
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 | 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 | 8408 | local t={}; |
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 | 8411 | e.plugins={}; |
8412 | function e.init(...) | |
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 | 8417 | end |
8418 | end | |
8419 | return e; | |
8420 | end | |
8421 | local i=0; | |
8422 | function e.new(o,a) | |
8423 | local t=setmetatable(a or{},t); | |
8424 | i=i+1; | |
8425 | t.id=tostring(i); | |
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 | 8428 | t.plugins={}; |
8429 | t.verse=e; | |
8430 | return t; | |
8431 | end | |
8432 | e.add_task=require"util.timer".add_task; | |
8433 | e.logger=o.init; | |
8434 | e.new_logger=o.init; | |
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 | 8439 | end |
8440 | function e.set_log_handler(e,t) | |
8441 | t=t or{"debug","info","warn","error"}; | |
8442 | o.reset(); | |
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 | 8447 | end |
8448 | end | |
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 | 8452 | end |
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 | 8459 | return io.stderr:write(o,"\t",a,"\t",t,"\n"); |
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 | 8462 | local function o(t) |
8463 | e.log("error","Error: %s",t); | |
8464 | e.log("error","Traceback: %s",debug.traceback()); | |
8465 | end | |
8466 | function e.set_error_handler(e) | |
8467 | o=e; | |
8468 | end | |
8469 | function e.loop() | |
8470 | return xpcall(a.loop,o); | |
8471 | end | |
8472 | function e.step() | |
8473 | return xpcall(a.step,o); | |
8474 | end | |
8475 | function e.quit() | |
8476 | return a.setquitting(true); | |
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 | 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 | 8505 | return true; |
8506 | end | |
8507 | function t:set_conn(t) | |
8508 | self.conn=t; | |
8509 | self.send=function(a,e) | |
8510 | self:event("outgoing",e); | |
8511 | e=tostring(e); | |
8512 | self:event("outgoing-raw",e); | |
8513 | return t:write(e); | |
8514 | end; | |
8515 | end | |
8516 | function t:close(t) | |
8517 | if not self.conn then | |
8518 | e.log("error","Attempt to close disconnected connection - possibly a bug"); | |
8519 | return; | |
8520 | end | |
8521 | local e=self.conn.disconnect(); | |
8522 | self.conn:close(); | |
8523 | e(self.conn,t); | |
8524 | end | |
8525 | function t:debug(...) | |
8526 | return self.logger("debug",...); | |
8527 | end | |
8528 | function t:info(...) | |
8529 | return self.logger("info",...); | |
8530 | end | |
8531 | function t:warn(...) | |
8532 | return self.logger("warn",...); | |
8533 | end | |
8534 | function t:error(...) | |
8535 | return self.logger("error",...); | |
8536 | end | |
8537 | function t:event(e,...) | |
8538 | self:debug("Firing event: "..tostring(e)); | |
8539 | return self.events.fire_event(e,...); | |
8540 | end | |
8541 | function t:hook(e,...) | |
8542 | return self.events.add_handler(e,...); | |
8543 | end | |
8544 | function t:unhook(t,e) | |
8545 | return self.events.remove_handler(t,e); | |
8546 | end | |
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 | 8549 | e.hook,e.unhook=t.hook,t.unhook; |
8550 | local t=e.events.fire_event; | |
8551 | function e:event(e,...) | |
8552 | return t(e,...); | |
8553 | end | |
8554 | return e; | |
8555 | end | |
8556 | function t:add_plugin(t) | |
8557 | if self.plugins[t]then return true;end | |
8558 | if require("verse.plugins."..t)then | |
8559 | local a,e=e.plugins[t](self); | |
8560 | if a~=false then | |
8561 | self:debug("Loaded %s plugin",t); | |
8562 | self.plugins[t]=true; | |
8563 | else | |
8564 | self:warn("Failed to load %s plugin: %s",t,e); | |
8565 | end | |
8566 | end | |
8567 | return self; | |
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 | 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 | 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 | 8577 | else |
8578 | t.connected=true; | |
8579 | t:event("connected"); | |
8580 | end | |
8581 | end | |
8582 | function a.onincoming(a,e) | |
8583 | t:event("incoming-raw",e); | |
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 | 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 | 8589 | end |
8590 | function a.ondrain(e) | |
8591 | t:event("drained"); | |
8592 | end | |
8593 | function a.onstatus(a,e) | |
8594 | t:event("status",e); | |
8595 | end | |
8596 | return a; | |
8597 | end | |
8598 | return e; |