Mon, 10 Sep 2018 14:56:55 +0100
squishy: Add new modules 'console' and 'pretty'
12 | 1 | package.preload['util.encodings']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
9 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
10 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
11 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
12 | end |
12 | 13 | local function e() |
14 | error("Function not implemented"); | |
15 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
16 | local e=require"mime"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
17 | a"encodings" |
12 | 18 | stringprep={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
19 | base64={encode=e.b64,decode=e.unb64}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
20 | return _M; |
12 | 21 | end) |
22 | package.preload['util.hashes']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
23 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
24 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
25 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
26 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
27 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
28 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
29 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
30 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
31 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
32 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
33 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
34 | local function t(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
35 | error("Hash method "..e.." not available",2); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
36 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
37 | local e=setmetatable({},{__index=t}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
38 | local function t(e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
39 | local e,a=pcall(require,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
40 | if e then o(a);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
41 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
42 | t("bgcrypto.md5",function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
43 | e.md5=t.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
44 | e.hmac_md5=t.hmac.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
45 | end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
46 | t("bgcrypto.sha1",function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
47 | e.sha1=t.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
48 | e.hmac_sha1=t.hmac.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
49 | e.scram_Hi_sha1=function(e,a,o)return t.pbkdf2(e,a,o,20);end; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
50 | end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
51 | t("bgcrypto.sha256",function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
52 | e.sha256=t.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
53 | e.hmac_sha256=t.hmac.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
54 | end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
55 | t("bgcrypto.sha512",function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
56 | e.sha512=t.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
57 | e.hmac_sha512=t.hmac.digest; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
58 | end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
59 | t("sha1",function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
60 | e.sha1=function(e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
61 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
62 | return t.sha1(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
63 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
64 | return(t.binary(e)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
65 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
66 | end; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
67 | end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
68 | return e; |
12 | 69 | end) |
70 | package.preload['lib.adhoc']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
71 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
72 | local function r(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
73 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
74 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
75 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
76 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
77 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
78 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
79 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
80 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
81 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
82 | local s,i=require"util.stanza",require"util.uuid"; |
12 | 83 | local e="http://jabber.org/protocol/commands"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
84 | local n={} |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
85 | local h={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
86 | local function o(i,o,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
87 | local e=s.stanza("command",{xmlns=e,node=i.node,status=o}); |
12 | 88 | if t then e.attr.sessionid=t;end |
89 | if a then e.attr.action=a;end | |
90 | return e; | |
91 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
92 | function h.new(a,i,e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
93 | return{name=a,node=i,handler=e,cmdtag=o,permission=(t or"user")}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
94 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
95 | function h.handle_cmd(o,h,t) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
96 | local e=t.tags[1].attr.sessionid or i.generate(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
97 | local a={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
98 | a.to=t.attr.to; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
99 | a.from=t.attr.from; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
100 | a.action=t.tags[1].attr.action or"execute"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
101 | a.form=t.tags[1]:child_with_ns("jabber:x:data"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
102 | local a,i=o:handler(a,n[e]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
103 | n[e]=i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
104 | local i=s.reply(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
105 | local t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
106 | if a.status=="completed"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
107 | n[e]=nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
108 | t=o:cmdtag("completed",e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
109 | elseif a.status=="canceled"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
110 | n[e]=nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
111 | t=o:cmdtag("canceled",e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
112 | elseif a.status=="error"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
113 | n[e]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
114 | i=s.error_reply(i,a.error.type,a.error.condition,a.error.message); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
115 | h.send(i); |
12 | 116 | return true; |
117 | else | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
118 | t=o:cmdtag("executing",e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
119 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
120 | for a,e in pairs(a)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
121 | if a=="info"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
122 | t:tag("note",{type="info"}):text(e):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
123 | elseif a=="warn"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
124 | t:tag("note",{type="warn"}):text(e):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
125 | elseif a=="error"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
126 | t:tag("note",{type="error"}):text(e.message):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
127 | elseif a=="actions"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
128 | local a=s.stanza("actions"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
129 | for i,e in ipairs(e)do |
12 | 130 | if(e=="prev")or(e=="next")or(e=="complete")then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
131 | a:tag(e):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
132 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
133 | r:log("error",'Command "'..o.name.. |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
134 | '" at node "'..o.node..'" provided an invalid action "'..e..'"'); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
135 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
136 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
137 | t:add_child(a); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
138 | elseif a=="form"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
139 | t:add_child((e.layout or e):form(e.values)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
140 | elseif a=="result"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
141 | t:add_child((e.layout or e):form(e.values,"result")); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
142 | elseif a=="other"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
143 | t:add_child(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
144 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
145 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
146 | i:add_child(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
147 | h.send(i); |
12 | 148 | return true; |
149 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
150 | return h; |
12 | 151 | end) |
152 | package.preload['util.stanza']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
153 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
154 | local function h(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
155 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
156 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
157 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
158 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
159 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
160 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
161 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
162 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
163 | end |
12 | 164 | local t=table.insert; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
165 | local s=table.remove; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
166 | local p=table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
167 | local r=string.format; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
168 | local u=string.match; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
169 | local w=tostring; |
12 | 170 | local m=setmetatable; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
171 | local n=pairs; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
172 | local i=ipairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
173 | local o=type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
174 | local y=string.gsub; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
175 | local l=string.sub; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
176 | local f=string.find; |
12 | 177 | local e=os; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
178 | local c=not e.getenv("WINDIR"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
179 | local d,a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
180 | if c then |
12 | 181 | local t,e=pcall(require,"util.termcolours"); |
182 | if t then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
183 | d,a=e.getstyle,e.getstring; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
184 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
185 | c=nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
186 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
187 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
188 | local v="urn:ietf:params:xml:ns:xmpp-stanzas"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
189 | h"stanza" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
190 | stanza_mt={__type="stanza"}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
191 | stanza_mt.__index=stanza_mt; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
192 | local e=stanza_mt; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
193 | function stanza(a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
194 | local t={name=a,attr=t or{},tags={}}; |
12 | 195 | return m(t,e); |
196 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
197 | local h=stanza; |
12 | 198 | function e:query(e) |
199 | return self:tag("query",{xmlns=e}); | |
200 | end | |
201 | function e:body(t,e) | |
202 | return self:tag("body",e):text(t); | |
203 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
204 | function e:tag(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
205 | local a=h(a,e); |
12 | 206 | local e=self.last_add; |
207 | if not e then e={};self.last_add=e;end | |
208 | (e[#e]or self):add_direct_child(a); | |
209 | t(e,a); | |
210 | return self; | |
211 | end | |
212 | function e:text(t) | |
213 | local e=self.last_add; | |
214 | (e and e[#e]or self):add_direct_child(t); | |
215 | return self; | |
216 | end | |
217 | function e:up() | |
218 | local e=self.last_add; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
219 | if e then s(e);end |
12 | 220 | return self; |
221 | end | |
222 | function e:reset() | |
223 | self.last_add=nil; | |
224 | return self; | |
225 | end | |
226 | function e:add_direct_child(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
227 | if o(e)=="table"then |
12 | 228 | t(self.tags,e); |
229 | end | |
230 | t(self,e); | |
231 | end | |
232 | function e:add_child(t) | |
233 | local e=self.last_add; | |
234 | (e and e[#e]or self):add_direct_child(t); | |
235 | return self; | |
236 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
237 | function e:get_child(t,a) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
238 | for o,e in i(self.tags)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
239 | if(not t or e.name==t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
240 | and((not a and self.attr.xmlns==e.attr.xmlns) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
241 | or e.attr.xmlns==a)then |
12 | 242 | return e; |
243 | end | |
244 | end | |
245 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
246 | function e:get_child_text(e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
247 | local e=self:get_child(e,t); |
12 | 248 | if e then |
249 | return e:get_text(); | |
250 | end | |
251 | return nil; | |
252 | end | |
253 | function e:child_with_name(t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
254 | for a,e in i(self.tags)do |
12 | 255 | if e.name==t then return e;end |
256 | end | |
257 | end | |
258 | function e:child_with_ns(t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
259 | for a,e in i(self.tags)do |
12 | 260 | if e.attr.xmlns==t then return e;end |
261 | end | |
262 | end | |
263 | function e:children() | |
264 | local e=0; | |
265 | return function(t) | |
266 | e=e+1 | |
267 | return t[e]; | |
268 | end,self,e; | |
269 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
270 | function e:childtags(i,o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
271 | local e=self.tags; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
272 | local a,t=1,#e; |
12 | 273 | return function() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
274 | for t=a,t do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
275 | local e=e[t]; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
276 | if(not i or e.name==i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
277 | and((not o and self.attr.xmlns==e.attr.xmlns) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
278 | or e.attr.xmlns==o)then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
279 | a=t+1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
280 | return e; |
12 | 281 | end |
282 | end | |
283 | end; | |
284 | end | |
285 | function e:maptags(i) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
286 | local o,t=self.tags,1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
287 | local n,a=#self,#o; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
288 | local e=1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
289 | while t<=a and a>0 do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
290 | if self[e]==o[t]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
291 | local i=i(self[e]); |
12 | 292 | if i==nil then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
293 | s(self,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
294 | s(o,t); |
12 | 295 | n=n-1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
296 | a=a-1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
297 | e=e-1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
298 | t=t-1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
299 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
300 | self[e]=i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
301 | o[t]=i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
302 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
303 | t=t+1; |
12 | 304 | end |
305 | e=e+1; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
306 | end |
12 | 307 | return self; |
308 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
309 | function e:find(a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
310 | local e=1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
311 | local s=#a+1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
312 | repeat |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
313 | local o,t,n; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
314 | local i=l(a,e,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
315 | if i=="@"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
316 | return self.attr[l(a,e+1)]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
317 | elseif i=="{"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
318 | o,e=u(a,"^([^}]+)}()",e+1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
319 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
320 | t,n,e=u(a,"^([^@/#]*)([/#]?)()",e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
321 | t=t~=""and t or nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
322 | if e==s then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
323 | if n=="#"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
324 | return self:get_child_text(t,o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
325 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
326 | return self:get_child(t,o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
327 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
328 | self=self:get_child(t,o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
329 | until not self |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
330 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
331 | local l |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
332 | do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
333 | local e={["'"]="'",["\""]=""",["<"]="<",[">"]=">",["&"]="&"}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
334 | function l(t)return(y(t,"['&<>\"]",e));end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
335 | _M.xml_escape=l; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
336 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
337 | local function y(o,e,h,a,r) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
338 | local i=0; |
12 | 339 | local s=o.name |
340 | t(e,"<"..s); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
341 | for o,n in n(o.attr)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
342 | if f(o,"\1",1,true)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
343 | local s,o=u(o,"^([^\1]*)\1?(.*)$"); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
344 | i=i+1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
345 | t(e," xmlns:ns"..i.."='"..a(s).."' ".."ns"..i..":"..o.."='"..a(n).."'"); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
346 | elseif not(o=="xmlns"and n==r)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
347 | t(e," "..o.."='"..a(n).."'"); |
12 | 348 | end |
349 | end | |
350 | local i=#o; | |
351 | if i==0 then | |
352 | t(e,"/>"); | |
353 | else | |
354 | t(e,">"); | |
355 | for i=1,i do | |
356 | local i=o[i]; | |
357 | if i.name then | |
358 | h(i,e,h,a,o.attr.xmlns); | |
359 | else | |
360 | t(e,a(i)); | |
361 | end | |
362 | end | |
363 | t(e,"</"..s..">"); | |
364 | end | |
365 | end | |
366 | function e.__tostring(t) | |
367 | local e={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
368 | y(t,e,y,l,nil); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
369 | return p(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
370 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
371 | function e.top_tag(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
372 | local e=""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
373 | if t.attr then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
374 | for t,a in n(t.attr)do if o(t)=="string"then e=e..r(" %s='%s'",t,l(w(a)));end end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
375 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
376 | return r("<%s%s>",t.name,e); |
12 | 377 | end |
378 | function e.get_text(e) | |
379 | if#e.tags==0 then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
380 | return p(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
381 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
382 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
383 | function e.get_error(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
384 | local o,a,t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
385 | local e=e:get_child("error"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
386 | if not e then |
12 | 387 | return nil,nil,nil; |
388 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
389 | o=e.attr.type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
390 | for o,e in i(e.tags)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
391 | if e.attr.xmlns==v then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
392 | if not t and e.name=="text"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
393 | t=e:get_text(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
394 | elseif not a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
395 | a=e.name; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
396 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
397 | if a and t then |
12 | 398 | break; |
399 | end | |
400 | end | |
401 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
402 | return o,a or"undefined-condition",t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
403 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
404 | do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
405 | local e=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
406 | function new_id() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
407 | e=e+1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
408 | return"lx"..e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
409 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
410 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
411 | function preserialize(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
412 | local a={name=e.name,attr=e.attr}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
413 | for i,e in i(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
414 | if o(e)=="table"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
415 | t(a,preserialize(e)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
416 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
417 | t(a,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
418 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
419 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
420 | return a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
421 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
422 | function deserialize(a) |
12 | 423 | if a then |
424 | local s=a.attr; | |
425 | for e=1,#s do s[e]=nil;end | |
426 | local h={}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
427 | for e in n(s)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
428 | if f(e,"|",1,true)and not f(e,"\1",1,true)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
429 | local t,a=u(e,"^([^|]+)|(.+)$"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
430 | h[t.."\1"..a]=s[e]; |
12 | 431 | s[e]=nil; |
432 | end | |
433 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
434 | for t,e in n(h)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
435 | s[t]=e; |
12 | 436 | end |
437 | m(a,e); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
438 | for t,e in i(a)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
439 | if o(e)=="table"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
440 | deserialize(e); |
12 | 441 | end |
442 | end | |
443 | if not a.tags then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
444 | local n={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
445 | for i,e in i(a)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
446 | if o(e)=="table"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
447 | t(n,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
448 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
449 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
450 | a.tags=n; |
12 | 451 | end |
452 | end | |
453 | return a; | |
454 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
455 | local function s(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
456 | local i,o={},{}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
457 | for t,e in n(a.attr)do i[t]=e;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
458 | local i={name=a.name,attr=i,tags=o}; |
12 | 459 | for e=1,#a do |
460 | local e=a[e]; | |
461 | if e.name then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
462 | e=s(e); |
12 | 463 | t(o,e); |
464 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
465 | t(i,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
466 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
467 | return m(i,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
468 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
469 | clone=s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
470 | function message(t,e) |
12 | 471 | if not e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
472 | return h("message",t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
473 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
474 | return h("message",t):tag("body"):text(e):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
475 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
476 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
477 | function iq(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
478 | if e and not e.id then e.id=new_id();end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
479 | return h("iq",e or{id=new_id()}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
480 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
481 | function reply(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
482 | return h(e.name,e.attr and{to=e.attr.from,from=e.attr.to,id=e.attr.id,type=((e.name=="iq"and"result")or e.attr.type)}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
483 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
484 | do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
485 | local t={xmlns=v}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
486 | function error_reply(e,o,i,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
487 | local e=reply(e); |
12 | 488 | e.attr.type="error"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
489 | e:tag("error",{type=o}) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
490 | :tag(i,t):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
491 | if(a)then e:tag("text",t):text(a):up();end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
492 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
493 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
494 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
495 | function presence(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
496 | return h("presence",e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
497 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
498 | if c then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
499 | local s=d("yellow"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
500 | local h=d("red"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
501 | local u=d("red"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
502 | local t=d("magenta"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
503 | local h=" "..a(s,"%s")..a(t,"=")..a(h,"'%s'"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
504 | local s=a(t,"<")..a(u,"%s").."%s"..a(t,">"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
505 | local d=s.."%s"..a(t,"</")..a(u,"%s")..a(t,">"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
506 | function e.pretty_print(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
507 | local t=""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
508 | for a,e in i(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
509 | if o(e)=="string"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
510 | t=t..l(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
511 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
512 | t=t..e:pretty_print(); |
12 | 513 | end |
514 | end | |
515 | local a=""; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
516 | if e.attr then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
517 | for e,t in n(e.attr)do if o(e)=="string"then a=a..r(h,e,w(t));end end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
518 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
519 | return r(d,e.name,a,t,e.name); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
520 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
521 | function e.pretty_top_tag(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
522 | local t=""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
523 | if e.attr then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
524 | for e,a in n(e.attr)do if o(e)=="string"then t=t..r(h,e,w(a));end end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
525 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
526 | return r(s,e.name,t); |
12 | 527 | end |
528 | else | |
529 | e.pretty_print=e.__tostring; | |
530 | e.pretty_top_tag=e.top_tag; | |
531 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
532 | return _M; |
12 | 533 | end) |
534 | package.preload['util.timer']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
535 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
536 | local function o(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
537 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
538 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
539 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
540 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
541 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
542 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
543 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
544 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
545 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
546 | local a=require"net.server"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
547 | local h=math.min |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
548 | local u=math.huge |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
549 | local i=require"socket".gettime; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
550 | local d=table.insert; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
551 | local l=pairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
552 | local r=type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
553 | local s={}; |
12 | 554 | local e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
555 | o"timer" |
12 | 556 | local t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
557 | if not a.event then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
558 | function t(o,n) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
559 | local i=i(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
560 | o=o+i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
561 | if o>=i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
562 | d(e,{o,n}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
563 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
564 | local e=n(i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
565 | if e and r(e)=="number"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
566 | return t(e,n); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
567 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
568 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
569 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
570 | a._addtimer(function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
571 | local a=i(); |
12 | 572 | if#e>0 then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
573 | for a,t in l(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
574 | d(s,t); |
12 | 575 | end |
576 | e={}; | |
577 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
578 | local e=u; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
579 | for n,o in l(s)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
580 | local o,i=o[1],o[2]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
581 | if o<=a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
582 | s[n]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
583 | local a=i(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
584 | if r(a)=="number"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
585 | t(a,i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
586 | e=h(e,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
587 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
588 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
589 | e=h(e,o-a); |
12 | 590 | end |
591 | end | |
592 | return e; | |
593 | end); | |
594 | else | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
595 | local e=a.event; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
596 | local n=a.event_base; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
597 | local a=(e.core and e.core.LEAVE)or-1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
598 | function t(o,e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
599 | local t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
600 | t=n:addevent(nil,0,function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
601 | local e=e(i()); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
602 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
603 | return 0,e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
604 | elseif t then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
605 | return a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
606 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
607 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
608 | ,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
609 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
610 | end |
12 | 611 | add_task=t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
612 | return _M; |
12 | 613 | end) |
614 | package.preload['util.termcolours']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
615 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
616 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
617 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
618 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
619 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
620 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
621 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
622 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
623 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
624 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
625 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
626 | local n,i=table.concat,table.insert; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
627 | local t,s=string.char,string.format; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
628 | local h=tonumber; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
629 | local c=ipairs; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
630 | local l=io.write; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
631 | local e; |
12 | 632 | if os.getenv("WINDIR")then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
633 | e=require"util.windows"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
634 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
635 | local o=e and e.get_consolecolor and e.get_consolecolor(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
636 | a"termcolours" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
637 | local u={ |
12 | 638 | reset=0;bright=1,dim=2,underscore=4,blink=5,reverse=7,hidden=8; |
639 | black=30;red=31;green=32;yellow=33;blue=34;magenta=35;cyan=36;white=37; | |
640 | ["black background"]=40;["red background"]=41;["green background"]=42;["yellow background"]=43;["blue background"]=44;["magenta background"]=45;["cyan background"]=46;["white background"]=47; | |
641 | bold=1,dark=2,underline=4,underlined=4,normal=0; | |
642 | } | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
643 | local d={ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
644 | ["0"]=o, |
12 | 645 | ["1"]=7+8, |
646 | ["1;33"]=2+4+8, | |
647 | ["1;31"]=4+8 | |
648 | } | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
649 | local r={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
650 | [1]="font-weight: bold",[2]="opacity: 0.5",[4]="text-decoration: underline",[8]="visibility: hidden", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
651 | [30]="color:black",[31]="color:red",[32]="color:green",[33]="color:#FFD700", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
652 | [34]="color:blue",[35]="color: magenta",[36]="color:cyan",[37]="color: white", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
653 | [40]="background-color:black",[41]="background-color:red",[42]="background-color:green", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
654 | [43]="background-color:yellow",[44]="background-color:blue",[45]="background-color: magenta", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
655 | [46]="background-color:cyan",[47]="background-color: white"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
656 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
657 | local a=t(27).."[%sm%s"..t(27).."[0m"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
658 | function getstring(e,t) |
12 | 659 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
660 | return s(a,e,t); |
12 | 661 | else |
662 | return t; | |
663 | end | |
664 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
665 | function getstyle(...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
666 | local e,t={...},{}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
667 | for a,e in c(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
668 | e=u[e]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
669 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
670 | i(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
671 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
672 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
673 | return n(t,";"); |
12 | 674 | end |
675 | local a="0"; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
676 | function setstyle(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
677 | e=e or"0"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
678 | if e~=a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
679 | l("\27["..e.."m"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
680 | a=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
681 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
682 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
683 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
684 | function setstyle(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
685 | t=t or"0"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
686 | if t~=a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
687 | e.set_consolecolor(d[t]or o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
688 | a=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
689 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
690 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
691 | if not o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
692 | function setstyle(e)end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
693 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
694 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
695 | local function a(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
696 | if e=="0"then return"</span>";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
697 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
698 | for e in e:gmatch("[^;]+")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
699 | i(t,r[h(e)]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
700 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
701 | return"</span><span style='"..n(t,";").."'>"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
702 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
703 | function tohtml(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
704 | return e:gsub("\027%[(.-)m",a); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
705 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
706 | return _M; |
12 | 707 | end) |
708 | package.preload['util.uuid']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
709 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
710 | local function o(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
711 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
712 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
713 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
714 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
715 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
716 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
717 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
718 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
719 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
720 | local n=tostring; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
721 | local e=os.time; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
722 | local a=os.clock; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
723 | local i=require"util.hashes".sha1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
724 | o"uuid" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
725 | local t=0; |
12 | 726 | local function o() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
727 | local e=e(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
728 | if t>=e then e=t+1;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
729 | t=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
730 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
731 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
732 | local function t(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
733 | return i(e..a()..n({}),true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
734 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
735 | local e=t(o()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
736 | local function a(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
737 | e=t(e..a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
738 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
739 | local function t(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
740 | if#e<t then a(o());end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
741 | local a=e:sub(0,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
742 | e=e:sub(t+1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
743 | return a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
744 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
745 | local function e() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
746 | return("%x"):format(t(1):byte()%4+8); |
12 | 747 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
748 | function generate() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
749 | return t(8).."-"..t(4).."-4"..t(3).."-"..(e())..t(3).."-"..t(12); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
750 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
751 | seed=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
752 | return _M; |
12 | 753 | end) |
754 | package.preload['net.dns']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
755 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
756 | local function c(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
757 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
758 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
759 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
760 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
761 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
762 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
763 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
764 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
765 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
766 | local s=require"socket"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
767 | local k=require"util.timer"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
768 | local e,b=pcall(require,"util.windows"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
769 | local _=(e and b)or os.getenv("WINDIR"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
770 | local u,E,v,a,i= |
12 | 771 | coroutine,io,math,string,table; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
772 | local m,h,o,f,r,p,x,q,t,e,z= |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
773 | ipairs,next,pairs,print,setmetatable,tostring,assert,error,unpack,select,type; |
12 | 774 | local e={ |
775 | get=function(t,...) | |
776 | local a=e('#',...); | |
777 | for a=1,a do | |
778 | t=t[e(a,...)]; | |
779 | if t==nil then break;end | |
780 | end | |
781 | return t; | |
782 | end; | |
783 | set=function(a,...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
784 | local n=e('#',...); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
785 | local s,o=e(n-1,...); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
786 | local t,i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
787 | for n=1,n-2 do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
788 | local n=e(n,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
789 | local e=a[n] |
12 | 790 | if o==nil then |
791 | if e==nil then | |
792 | return; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
793 | elseif h(e,h(e))then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
794 | t=nil;i=nil; |
12 | 795 | elseif t==nil then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
796 | t=a;i=n; |
12 | 797 | end |
798 | elseif e==nil then | |
799 | e={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
800 | a[n]=e; |
12 | 801 | end |
802 | a=e | |
803 | end | |
804 | if o==nil and t then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
805 | t[i]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
806 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
807 | a[s]=o; |
12 | 808 | return o; |
809 | end | |
810 | end; | |
811 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
812 | local d,l=e.get,e.set; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
813 | local j=15; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
814 | c('dns') |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
815 | local t=_M; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
816 | local n=i.insert |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
817 | local function c(e) |
12 | 818 | return(e-(e%256))/256; |
819 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
820 | local function y(e) |
12 | 821 | local t={}; |
822 | for o,e in o(e)do | |
823 | t[o]=e; | |
824 | t[e]=e; | |
825 | t[a.lower(e)]=e; | |
826 | end | |
827 | return t; | |
828 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
829 | local function w(i) |
12 | 830 | local e={}; |
831 | for o,i in o(i)do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
832 | local t=a.char(c(o),o%256); |
12 | 833 | e[o]=t; |
834 | e[i]=t; | |
835 | e[a.lower(i)]=t; | |
836 | end | |
837 | return e; | |
838 | end | |
839 | t.types={ | |
840 | 'A','NS','MD','MF','CNAME','SOA','MB','MG','MR','NULL','WKS', | |
841 | 'PTR','HINFO','MINFO','MX','TXT', | |
842 | [28]='AAAA',[29]='LOC',[33]='SRV', | |
843 | [252]='AXFR',[253]='MAILB',[254]='MAILA',[255]='*'}; | |
844 | t.classes={'IN','CS','CH','HS',[255]='*'}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
845 | t.type=y(t.types); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
846 | t.class=y(t.classes); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
847 | t.typecode=w(t.types); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
848 | t.classcode=w(t.classes); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
849 | local function g(e,i,o) |
12 | 850 | if a.byte(e,-1)~=46 then e=e..'.';end |
851 | e=a.lower(e); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
852 | return e,t.type[i or'A'],t.class[o or'IN']; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
853 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
854 | local function y(t,a,n) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
855 | a=a or s.gettime(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
856 | for o,e in m(t)do |
12 | 857 | if e.tod then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
858 | e.ttl=v.floor(e.tod-a); |
12 | 859 | if e.ttl<=0 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
860 | t[e[e.type:lower()]]=nil; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
861 | i.remove(t,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
862 | return y(t,a,n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
863 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
864 | elseif n=='soft'then |
12 | 865 | x(e.ttl==0); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
866 | t[e[e.type:lower()]]=nil; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
867 | i.remove(t,o); |
12 | 868 | end |
869 | end | |
870 | end | |
871 | local e={}; | |
872 | e.__index=e; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
873 | e.timeout=j; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
874 | local function j(e) |
12 | 875 | local e=e.type and e[e.type:lower()]; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
876 | if z(e)~="string"then |
12 | 877 | return"<UNKNOWN RDATA TYPE>"; |
878 | end | |
879 | return e; | |
880 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
881 | local w={ |
12 | 882 | LOC=e.LOC_tostring; |
883 | MX=function(e) | |
884 | return a.format('%2i %s',e.pref,e.mx); | |
885 | end; | |
886 | SRV=function(e) | |
887 | local e=e.srv; | |
888 | return a.format('%5d %5d %5d %s',e.priority,e.weight,e.port,e.target); | |
889 | end; | |
890 | }; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
891 | local x={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
892 | function x.__tostring(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
893 | local t=(w[e.type]or j)(e); |
12 | 894 | return a.format('%2s %-5s %6i %-28s %s',e.class,e.type,e.ttl,e.name,t); |
895 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
896 | local j={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
897 | function j.__tostring(t) |
12 | 898 | local e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
899 | for a,t in m(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
900 | n(e,p(t)..'\n'); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
901 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
902 | return i.concat(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
903 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
904 | local w={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
905 | function w.__tostring(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
906 | local a=s.gettime(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
907 | local t={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
908 | for i,e in o(e)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
909 | for i,e in o(e)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
910 | for o,e in o(e)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
911 | y(e,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
912 | n(t,p(e)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
913 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
914 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
915 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
916 | return i.concat(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
917 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
918 | function e:new() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
919 | local t={active={},cache={},unsorted={}}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
920 | r(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
921 | r(t.cache,w); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
922 | r(t.unsorted,{__mode='kv'}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
923 | return t; |
12 | 924 | end |
925 | function t.random(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
926 | v.randomseed(v.floor(1e4*s.gettime())%2147483648); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
927 | t.random=v.random; |
12 | 928 | return t.random(...); |
929 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
930 | local function v(e) |
12 | 931 | e=e or{}; |
932 | e.id=e.id or t.random(0,65535); | |
933 | e.rd=e.rd or 1; | |
934 | e.tc=e.tc or 0; | |
935 | e.aa=e.aa or 0; | |
936 | e.opcode=e.opcode or 0; | |
937 | e.qr=e.qr or 0; | |
938 | e.rcode=e.rcode or 0; | |
939 | e.z=e.z or 0; | |
940 | e.ra=e.ra or 0; | |
941 | e.qdcount=e.qdcount or 1; | |
942 | e.ancount=e.ancount or 0; | |
943 | e.nscount=e.nscount or 0; | |
944 | e.arcount=e.arcount or 0; | |
945 | local t=a.char( | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
946 | c(e.id),e.id%256, |
12 | 947 | e.rd+2*e.tc+4*e.aa+8*e.opcode+128*e.qr, |
948 | e.rcode+16*e.z+128*e.ra, | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
949 | c(e.qdcount),e.qdcount%256, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
950 | c(e.ancount),e.ancount%256, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
951 | c(e.nscount),e.nscount%256, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
952 | c(e.arcount),e.arcount%256 |
12 | 953 | ); |
954 | return t,e.id; | |
955 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
956 | local function c(t) |
12 | 957 | local e={}; |
958 | for t in a.gmatch(t,'[^.]+')do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
959 | n(e,a.char(a.len(t))); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
960 | n(e,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
961 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
962 | n(e,a.char(0)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
963 | return i.concat(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
964 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
965 | local function z(o,a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
966 | o=c(o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
967 | a=t.typecode[a or'a']; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
968 | e=t.classcode[e or'in']; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
969 | return o..a..e; |
12 | 970 | end |
971 | function e:byte(e) | |
972 | e=e or 1; | |
973 | local t=self.offset; | |
974 | local o=t+e-1; | |
975 | if o>#self.packet then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
976 | q(a.format('out of bounds: %i>%i',o,#self.packet)); |
12 | 977 | end |
978 | self.offset=t+e; | |
979 | return a.byte(self.packet,t,o); | |
980 | end | |
981 | function e:word() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
982 | local t,e=self:byte(2); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
983 | return 256*t+e; |
12 | 984 | end |
985 | function e:dword() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
986 | local o,t,a,e=self:byte(4); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
987 | return 16777216*o+65536*t+256*a+e; |
12 | 988 | end |
989 | function e:sub(e) | |
990 | e=e or 1; | |
991 | local t=a.sub(self.packet,self.offset,self.offset+e-1); | |
992 | self.offset=self.offset+e; | |
993 | return t; | |
994 | end | |
995 | function e:header(t) | |
996 | local e=self:word(); | |
997 | if not self.active[e]and not t then return nil;end | |
998 | local e={id=e}; | |
999 | local t,a=self:byte(2); | |
1000 | e.rd=t%2; | |
1001 | e.tc=t/2%2; | |
1002 | e.aa=t/4%2; | |
1003 | e.opcode=t/8%16; | |
1004 | e.qr=t/128; | |
1005 | e.rcode=a%16; | |
1006 | e.z=a/16%8; | |
1007 | e.ra=a/128; | |
1008 | e.qdcount=self:word(); | |
1009 | e.ancount=self:word(); | |
1010 | e.nscount=self:word(); | |
1011 | e.arcount=self:word(); | |
1012 | for a,t in o(e)do e[a]=t-t%1;end | |
1013 | return e; | |
1014 | end | |
1015 | function e:name() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1016 | local a,t=nil,0; |
12 | 1017 | local e=self:byte(); |
1018 | local o={}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1019 | if e==0 then return"."end |
12 | 1020 | while e>0 do |
1021 | if e>=192 then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1022 | t=t+1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1023 | if t>=20 then q('dns error: 20 pointers');end; |
12 | 1024 | local e=((e-192)*256)+self:byte(); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1025 | a=a or self.offset; |
12 | 1026 | self.offset=e+1; |
1027 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1028 | n(o,self:sub(e)..'.'); |
12 | 1029 | end |
1030 | e=self:byte(); | |
1031 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1032 | self.offset=a or self.offset; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1033 | return i.concat(o); |
12 | 1034 | end |
1035 | function e:question() | |
1036 | local e={}; | |
1037 | e.name=self:name(); | |
1038 | e.type=t.type[self:word()]; | |
1039 | e.class=t.class[self:word()]; | |
1040 | return e; | |
1041 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1042 | function e:A(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1043 | local o,t,n,i=self:byte(4); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1044 | e.a=a.format('%i.%i.%i.%i',o,t,n,i); |
12 | 1045 | end |
1046 | function e:AAAA(a) | |
1047 | local e={}; | |
1048 | for t=1,a.rdlength,2 do | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1049 | local t,a=self:byte(2); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1050 | i.insert(e,("%02x%02x"):format(t,a)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1051 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1052 | e=i.concat(e,":"):gsub("%f[%x]0+(%x)","%1"); |
12 | 1053 | local t={}; |
1054 | for e in e:gmatch(":[0:]+:")do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1055 | i.insert(t,e) |
12 | 1056 | end |
1057 | if#t==0 then | |
1058 | a.aaaa=e; | |
1059 | return | |
1060 | elseif#t>1 then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1061 | i.sort(t,function(t,e)return#t>#e end); |
12 | 1062 | end |
1063 | a.aaaa=e:gsub(t[1],"::",1):gsub("^0::","::"):gsub("::0$","::"); | |
1064 | end | |
1065 | function e:CNAME(e) | |
1066 | e.cname=self:name(); | |
1067 | end | |
1068 | function e:MX(e) | |
1069 | e.pref=self:word(); | |
1070 | e.mx=self:name(); | |
1071 | end | |
1072 | function e:LOC_nibble_power() | |
1073 | local e=self:byte(); | |
1074 | return((e-(e%16))/16)*(10^(e%16)); | |
1075 | end | |
1076 | function e:LOC(e) | |
1077 | e.version=self:byte(); | |
1078 | if e.version==0 then | |
1079 | e.loc=e.loc or{}; | |
1080 | e.loc.size=self:LOC_nibble_power(); | |
1081 | e.loc.horiz_pre=self:LOC_nibble_power(); | |
1082 | e.loc.vert_pre=self:LOC_nibble_power(); | |
1083 | e.loc.latitude=self:dword(); | |
1084 | e.loc.longitude=self:dword(); | |
1085 | e.loc.altitude=self:dword(); | |
1086 | end | |
1087 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1088 | local function c(e,i,t) |
12 | 1089 | e=e-2147483648; |
1090 | if e<0 then i=t;e=-e;end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1091 | local n,o,t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1092 | t=e%6e4; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1093 | e=(e-t)/6e4; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1094 | o=e%60; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1095 | n=(e-o)/60; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1096 | return a.format('%3d %2d %2.3f %s',n,o,t/1e3,i); |
12 | 1097 | end |
1098 | function e.LOC_tostring(e) | |
1099 | local t={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1100 | n(t,a.format( |
12 | 1101 | '%s %s %.2fm %.2fm %.2fm %.2fm', |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1102 | c(e.loc.latitude,'N','S'), |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1103 | c(e.loc.longitude,'E','W'), |
12 | 1104 | (e.loc.altitude-1e7)/100, |
1105 | e.loc.size/100, | |
1106 | e.loc.horiz_pre/100, | |
1107 | e.loc.vert_pre/100 | |
1108 | )); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1109 | return i.concat(t); |
12 | 1110 | end |
1111 | function e:NS(e) | |
1112 | e.ns=self:name(); | |
1113 | end | |
1114 | function e:SOA(e) | |
1115 | end | |
1116 | function e:SRV(e) | |
1117 | e.srv={}; | |
1118 | e.srv.priority=self:word(); | |
1119 | e.srv.weight=self:word(); | |
1120 | e.srv.port=self:word(); | |
1121 | e.srv.target=self:name(); | |
1122 | end | |
1123 | function e:PTR(e) | |
1124 | e.ptr=self:name(); | |
1125 | end | |
1126 | function e:TXT(e) | |
1127 | e.txt=self:sub(self:byte()); | |
1128 | end | |
1129 | function e:rr() | |
1130 | local e={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1131 | r(e,x); |
12 | 1132 | e.name=self:name(self); |
1133 | e.type=t.type[self:word()]or e.type; | |
1134 | e.class=t.class[self:word()]or e.class; | |
1135 | e.ttl=65536*self:word()+self:word(); | |
1136 | e.rdlength=self:word(); | |
1137 | if e.ttl<=0 then | |
1138 | e.tod=self.time+30; | |
1139 | else | |
1140 | e.tod=self.time+e.ttl; | |
1141 | end | |
1142 | local a=self.offset; | |
1143 | local t=self[t.type[e.type]]; | |
1144 | if t then t(self,e);end | |
1145 | self.offset=a; | |
1146 | e.rdata=self:sub(e.rdlength); | |
1147 | return e; | |
1148 | end | |
1149 | function e:rrs(t) | |
1150 | local e={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1151 | for t=1,t do n(e,self:rr());end |
12 | 1152 | return e; |
1153 | end | |
1154 | function e:decode(t,o) | |
1155 | self.packet,self.offset=t,1; | |
1156 | local t=self:header(o); | |
1157 | if not t then return nil;end | |
1158 | local t={header=t}; | |
1159 | t.question={}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1160 | local i=self.offset; |
12 | 1161 | for e=1,t.header.qdcount do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1162 | n(t.question,self:question()); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1163 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1164 | t.question.raw=a.sub(self.packet,i,self.offset-1); |
12 | 1165 | if not o then |
1166 | if not self.active[t.header.id]or not self.active[t.header.id][t.question.raw]then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1167 | self.active[t.header.id]=nil; |
12 | 1168 | return nil; |
1169 | end | |
1170 | end | |
1171 | t.answer=self:rrs(t.header.ancount); | |
1172 | t.authority=self:rrs(t.header.nscount); | |
1173 | t.additional=self:rrs(t.header.arcount); | |
1174 | return t; | |
1175 | end | |
1176 | e.delays={1,3}; | |
1177 | function e:addnameserver(e) | |
1178 | self.server=self.server or{}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1179 | n(self.server,e); |
12 | 1180 | end |
1181 | function e:setnameserver(e) | |
1182 | self.server={}; | |
1183 | self:addnameserver(e); | |
1184 | end | |
1185 | function e:adddefaultnameservers() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1186 | if _ then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1187 | if b and b.get_nameservers then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1188 | for t,e in m(b.get_nameservers())do |
12 | 1189 | self:addnameserver(e); |
1190 | end | |
1191 | end | |
1192 | if not self.server or#self.server==0 then | |
1193 | self:addnameserver("208.67.222.222"); | |
1194 | self:addnameserver("208.67.220.220"); | |
1195 | end | |
1196 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1197 | local e=E.open("/etc/resolv.conf"); |
12 | 1198 | if e then |
1199 | for e in e:lines()do | |
1200 | e=e:gsub("#.*$","") | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1201 | :match('^%s*nameserver%s+(.*)%s*$'); |
12 | 1202 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1203 | e:gsub("%f[%d.](%d+%.%d+%.%d+%.%d+)%f[^%d.]",function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1204 | self:addnameserver(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1205 | end); |
12 | 1206 | end |
1207 | end | |
1208 | end | |
1209 | if not self.server or#self.server==0 then | |
1210 | self:addnameserver("127.0.0.1"); | |
1211 | end | |
1212 | end | |
1213 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1214 | function e:getsocket(o) |
12 | 1215 | self.socket=self.socket or{}; |
1216 | self.socketset=self.socketset or{}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1217 | local e=self.socket[o]; |
12 | 1218 | if e then return e;end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1219 | local a,t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1220 | e,t=s.udp(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1221 | if e and self.socket_wrapper then e,t=self.socket_wrapper(e,self);end |
12 | 1222 | if not e then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1223 | return nil,t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1224 | end |
12 | 1225 | e:settimeout(0); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1226 | self.socket[o]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1227 | self.socketset[e]=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1228 | a,t=e:setsockname('*',0); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1229 | if not a then return self:servfail(e,t);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1230 | a,t=e:setpeername(self.server[o],53); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1231 | if not a then return self:servfail(e,t);end |
12 | 1232 | return e; |
1233 | end | |
1234 | function e:voidsocket(e) | |
1235 | if self.socket[e]then | |
1236 | self.socketset[self.socket[e]]=nil; | |
1237 | self.socket[e]=nil; | |
1238 | elseif self.socketset[e]then | |
1239 | self.socket[self.socketset[e]]=nil; | |
1240 | self.socketset[e]=nil; | |
1241 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1242 | e:close(); |
12 | 1243 | end |
1244 | function e:socket_wrapper_set(e) | |
1245 | self.socket_wrapper=e; | |
1246 | end | |
1247 | function e:closeall() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1248 | for t,e in m(self.socket)do |
12 | 1249 | self.socket[t]=nil; |
1250 | self.socketset[e]=nil; | |
1251 | e:close(); | |
1252 | end | |
1253 | end | |
1254 | function e:remember(e,t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1255 | local a,o,i=g(e.name,e.type,e.class); |
12 | 1256 | if t~='*'then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1257 | t=o; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1258 | local t=d(self.cache,i,'*',a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1259 | if t then n(t,e);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1260 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1261 | self.cache=self.cache or r({},w); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1262 | local a=d(self.cache,i,t,a)or |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1263 | l(self.cache,i,t,a,r({},j)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1264 | if not a[e[o:lower()]]then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1265 | a[e[o:lower()]]=true; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1266 | n(a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1267 | end |
12 | 1268 | if t=='MX'then self.unsorted[a]=true;end |
1269 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1270 | local function c(e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1271 | return(e.pref==t.pref)and(e.mx<t.mx)or(e.pref<t.pref); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1272 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1273 | function e:peek(o,a,t,n) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1274 | o,a,t=g(o,a,t); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1275 | local e=d(self.cache,t,a,o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1276 | if not e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1277 | if n then if n<=0 then return end else n=3 end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1278 | e=d(self.cache,t,"CNAME",o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1279 | if not(e and e[1])then return end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1280 | return self:peek(e[1].cname,a,t,n-1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1281 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1282 | if y(e,s.gettime())and a=='*'or not h(e)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1283 | l(self.cache,t,a,o,nil); |
12 | 1284 | return nil; |
1285 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1286 | if self.unsorted[e]then i.sort(e,c);self.unsorted[e]=nil;end |
12 | 1287 | return e; |
1288 | end | |
1289 | function e:purge(e) | |
1290 | if e=='soft'then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1291 | self.time=s.gettime(); |
12 | 1292 | for t,e in o(self.cache or{})do |
1293 | for t,e in o(e)do | |
1294 | for t,e in o(e)do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1295 | y(e,self.time,'soft') |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1296 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1297 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1298 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1299 | else self.cache=r({},w);end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1300 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1301 | function e:query(e,a,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1302 | e,a,t=g(e,a,t) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1303 | local n=u.running(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1304 | local o=d(self.wanted,t,a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1305 | if n and o then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1306 | l(self.wanted,t,a,e,n,true); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1307 | return true; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1308 | end |
12 | 1309 | if not self.server then self:adddefaultnameservers();end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1310 | local h=z(e,a,t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1311 | local o=self:peek(e,a,t); |
12 | 1312 | if o then return o;end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1313 | local o,i=v(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1314 | local o={ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1315 | packet=o..h, |
12 | 1316 | server=self.best_server, |
1317 | delay=1, | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1318 | retry=s.gettime()+self.delays[1] |
12 | 1319 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1320 | self.active[i]=self.active[i]or{}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1321 | self.active[i][h]=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1322 | if n then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1323 | l(self.wanted,t,a,e,n,true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1324 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1325 | local i,h=self:getsocket(o.server) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1326 | if not i then |
12 | 1327 | return nil,h; |
1328 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1329 | i:send(o.packet) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1330 | if k and self.timeout then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1331 | local r=#self.server; |
12 | 1332 | local s=1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1333 | k.add_task(self.timeout,function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1334 | if d(self.wanted,t,a,e,n)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1335 | if s<r then |
12 | 1336 | s=s+1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1337 | self:servfail(i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1338 | o.server=self.best_server; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1339 | i,h=self:getsocket(o.server); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1340 | if i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1341 | i:send(o.packet); |
12 | 1342 | return self.timeout; |
1343 | end | |
1344 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1345 | self:cancel(t,a,e); |
12 | 1346 | end |
1347 | end) | |
1348 | end | |
1349 | return true; | |
1350 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1351 | function e:servfail(t,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1352 | local n=self.socketset[t] |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1353 | t=self:voidsocket(t); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1354 | self.time=s.gettime(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1355 | for s,a in o(self.active)do |
12 | 1356 | for o,e in o(a)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1357 | if e.server==n then |
12 | 1358 | e.server=e.server+1 |
1359 | if e.server>#self.server then | |
1360 | e.server=1; | |
1361 | end | |
1362 | e.retries=(e.retries or 0)+1; | |
1363 | if e.retries>=#self.server then | |
1364 | a[o]=nil; | |
1365 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1366 | t,i=self:getsocket(e.server); |
12 | 1367 | if t then t:send(e.packet);end |
1368 | end | |
1369 | end | |
1370 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1371 | if h(a)==nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1372 | self.active[s]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1373 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1374 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1375 | if n==self.best_server then |
12 | 1376 | self.best_server=self.best_server+1; |
1377 | if self.best_server>#self.server then | |
1378 | self.best_server=1; | |
1379 | end | |
1380 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1381 | return t,i; |
12 | 1382 | end |
1383 | function e:settimeout(e) | |
1384 | self.timeout=e; | |
1385 | end | |
1386 | function e:receive(t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1387 | self.time=s.gettime(); |
12 | 1388 | t=t or self.socket; |
1389 | local e; | |
1390 | for a,t in o(t)do | |
1391 | if self.socketset[t]then | |
1392 | local t=t:receive(); | |
1393 | if t then | |
1394 | e=self:decode(t); | |
1395 | if e and self.active[e.header.id] | |
1396 | and self.active[e.header.id][e.question.raw]then | |
1397 | for a,t in o(e.answer)do | |
1398 | self:remember(t,e.question[1].type) | |
1399 | end | |
1400 | local t=self.active[e.header.id]; | |
1401 | t[e.question.raw]=nil; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1402 | if not h(t)then self.active[e.header.id]=nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1403 | if not h(self.active)then self:closeall();end |
12 | 1404 | local e=e.question[1]; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1405 | local t=d(self.wanted,e.class,e.type,e.name); |
12 | 1406 | if t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1407 | for e in o(t)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1408 | if u.status(e)=="suspended"then u.resume(e);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1409 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1410 | l(self.wanted,e.class,e.type,e.name,nil); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1411 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1412 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1413 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1414 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1415 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1416 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1417 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1418 | function e:feed(a,t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1419 | self.time=s.gettime(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1420 | local e=self:decode(t,e); |
12 | 1421 | if e and self.active[e.header.id] |
1422 | and self.active[e.header.id][e.question.raw]then | |
1423 | for a,t in o(e.answer)do | |
1424 | self:remember(t,e.question[1].type); | |
1425 | end | |
1426 | local t=self.active[e.header.id]; | |
1427 | t[e.question.raw]=nil; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1428 | if not h(t)then self.active[e.header.id]=nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1429 | if not h(self.active)then self:closeall();end |
12 | 1430 | local e=e.question[1]; |
1431 | if e then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1432 | local t=d(self.wanted,e.class,e.type,e.name); |
12 | 1433 | if t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1434 | for e in o(t)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1435 | if u.status(e)=="suspended"then u.resume(e);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1436 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1437 | l(self.wanted,e.class,e.type,e.name,nil); |
12 | 1438 | end |
1439 | end | |
1440 | end | |
1441 | return e; | |
1442 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1443 | function e:cancel(t,a,i) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1444 | local e=d(self.wanted,t,a,i); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1445 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1446 | for e in o(e)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1447 | if u.status(e)=="suspended"then u.resume(e);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1448 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1449 | l(self.wanted,t,a,i,nil); |
12 | 1450 | end |
1451 | end | |
1452 | function e:pulse() | |
1453 | while self:receive()do end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1454 | if not h(self.active)then return nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1455 | self.time=s.gettime(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1456 | for a,t in o(self.active)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1457 | for o,e in o(t)do |
12 | 1458 | if self.time>=e.retry then |
1459 | e.server=e.server+1; | |
1460 | if e.server>#self.server then | |
1461 | e.server=1; | |
1462 | e.delay=e.delay+1; | |
1463 | end | |
1464 | if e.delay>#self.delays then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1465 | t[o]=nil; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1466 | if not h(t)then self.active[a]=nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1467 | if not h(self.active)then return nil;end |
12 | 1468 | else |
1469 | local t=self.socket[e.server]; | |
1470 | if t then t:send(e.packet);end | |
1471 | e.retry=self.time+self.delays[e.delay]; | |
1472 | end | |
1473 | end | |
1474 | end | |
1475 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1476 | if h(self.active)then return true;end |
12 | 1477 | return nil; |
1478 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1479 | function e:lookup(a,e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1480 | self:query(a,e,t) |
12 | 1481 | while self:pulse()do |
1482 | local e={} | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1483 | for t,a in m(self.socket)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1484 | e[t]=a |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1485 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1486 | s.select(e,nil,4) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1487 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1488 | return self:peek(a,e,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1489 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1490 | function e:lookupex(o,a,t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1491 | return self:peek(a,t,e)or self:query(a,t,e); |
12 | 1492 | end |
1493 | function e:tohostname(e) | |
1494 | return t.lookup(e:gsub("(%d+)%.(%d+)%.(%d+)%.(%d+)","%4.%3.%2.%1.in-addr.arpa."),"PTR"); | |
1495 | end | |
1496 | local i={ | |
1497 | qr={[0]='query','response'}, | |
1498 | opcode={[0]='query','inverse query','server status request'}, | |
1499 | aa={[0]='non-authoritative','authoritative'}, | |
1500 | tc={[0]='complete','truncated'}, | |
1501 | rd={[0]='recursion not desired','recursion desired'}, | |
1502 | ra={[0]='recursion not available','recursion available'}, | |
1503 | z={[0]='(reserved)'}, | |
1504 | rcode={[0]='no error','format error','server failure','name error','not implemented'}, | |
1505 | type=t.type, | |
1506 | class=t.class | |
1507 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1508 | local function s(t,e) |
12 | 1509 | return(i[e]and i[e][t[e]])or''; |
1510 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1511 | function e.print(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1512 | for o,e in o{'id','qr','opcode','aa','tc','rd','ra','z', |
12 | 1513 | 'rcode','qdcount','ancount','nscount','arcount'}do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1514 | f(a.format('%-30s','header.'..e),t.header[e],s(t.header,e)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1515 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1516 | for e,t in m(t.question)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1517 | f(a.format('question[%i].name ',e),t.name); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1518 | f(a.format('question[%i].type ',e),t.type); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1519 | f(a.format('question[%i].class ',e),t.class); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1520 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1521 | local r={name=1,type=1,class=1,ttl=1,rdlength=1,rdata=1}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1522 | local e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1523 | for n,i in o({'answer','authority','additional'})do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1524 | for h,n in o(t[i])do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1525 | for o,t in o({'name','type','class','ttl','rdlength'})do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1526 | e=a.format('%s[%i].%s',i,h,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1527 | f(a.format('%-30s',e),n[t],s(n,t)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1528 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1529 | for t,o in o(n)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1530 | if not r[t]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1531 | e=a.format('%s[%i].%s',i,h,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1532 | f(a.format('%-30s %s',p(e),p(o))); |
12 | 1533 | end |
1534 | end | |
1535 | end | |
1536 | end | |
1537 | end | |
1538 | function t.resolver() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1539 | local t={active={},cache={},unsorted={},wanted={},best_server=1}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1540 | r(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1541 | r(t.cache,w); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1542 | r(t.unsorted,{__mode='kv'}); |
12 | 1543 | return t; |
1544 | end | |
1545 | local e=t.resolver(); | |
1546 | t._resolver=e; | |
1547 | function t.lookup(...) | |
1548 | return e:lookup(...); | |
1549 | end | |
1550 | function t.tohostname(...) | |
1551 | return e:tohostname(...); | |
1552 | end | |
1553 | function t.purge(...) | |
1554 | return e:purge(...); | |
1555 | end | |
1556 | function t.peek(...) | |
1557 | return e:peek(...); | |
1558 | end | |
1559 | function t.query(...) | |
1560 | return e:query(...); | |
1561 | end | |
1562 | function t.feed(...) | |
1563 | return e:feed(...); | |
1564 | end | |
1565 | function t.cancel(...) | |
1566 | return e:cancel(...); | |
1567 | end | |
1568 | function t.settimeout(...) | |
1569 | return e:settimeout(...); | |
1570 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1571 | function t.cache() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1572 | return e.cache; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1573 | end |
12 | 1574 | function t.socket_wrapper_set(...) |
1575 | return e:socket_wrapper_set(...); | |
1576 | end | |
1577 | return t; | |
1578 | end) | |
1579 | package.preload['net.adns']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1580 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1581 | local function o(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1582 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1583 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1584 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1585 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1586 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1587 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1588 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1589 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1590 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1591 | local c=require"net.server"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1592 | local a=require"net.dns"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1593 | local t=require"util.logger".init("adns"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1594 | local e,e=table.insert,table.remove; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1595 | local n,h,l=coroutine,tostring,pcall; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1596 | local function u(a,a,t,e)return(e-t)+1;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1597 | o"adns" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1598 | function lookup(d,e,s,r) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1599 | return n.wrap(function(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1600 | if o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1601 | t("debug","Records for %s already cached, using those...",e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1602 | d(o); |
12 | 1603 | return; |
1604 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1605 | t("debug","Records for %s not in cache, sending query (%s)...",e,h(n.running())); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1606 | local i,o=a.query(e,s,r); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1607 | if i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1608 | n.yield({r or"IN",s or"A",e,n.running()}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1609 | t("debug","Reply for %s (%s)",e,h(n.running())); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1610 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1611 | if i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1612 | i,o=l(d,a.peek(e,s,r)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1613 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1614 | t("error","Error sending DNS query: %s",o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1615 | i,o=l(d,nil,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1616 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1617 | if not i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1618 | t("error","Error in DNS response handler: %s",h(o)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1619 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1620 | end)(a.peek(e,s,r)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1621 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1622 | function cancel(e,o,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1623 | t("warn","Cancelling DNS lookup for %s",h(e[3])); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1624 | a.cancel(e[1],e[2],e[3],e[4],o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1625 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1626 | function new_async_socket(i,o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1627 | local n="<unknown>"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1628 | local s={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1629 | local e={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1630 | local h; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1631 | function s.onincoming(o,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1632 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1633 | a.feed(e,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1634 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1635 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1636 | function s.ondisconnect(a,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1637 | if i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1638 | t("warn","DNS socket for %s disconnected: %s",n,i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1639 | local e=o.server; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1640 | if o.socketset[a]==o.best_server and o.best_server==#e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1641 | t("error","Exhausted all %d configured DNS servers, next lookup will try %s again",#e,e[1]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1642 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1643 | o:servfail(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1644 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1645 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1646 | e,h=c.wrapclient(i,"dns",53,s); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1647 | if not e then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1648 | return nil,h; |
12 | 1649 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1650 | e.settimeout=function()end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1651 | e.setsockname=function(t,...)return i:setsockname(...);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1652 | e.setpeername=function(o,...)n=(...);local a,t=i:setpeername(...);o:set_send(u);return a,t;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1653 | e.connect=function(t,...)return i:connect(...)end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1654 | e.send=function(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1655 | t("debug","Sending DNS query to %s",n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1656 | return i:send(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1657 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1658 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1659 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1660 | a.socket_wrapper_set(new_async_socket); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1661 | return _M; |
12 | 1662 | end) |
1663 | package.preload['net.server']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1664 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1665 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1666 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1667 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1668 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1669 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1670 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1671 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1672 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1673 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1674 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1675 | local m=function(e) |
12 | 1676 | return _G[e] |
1677 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1678 | local W,e=require("util.logger").init("socket"),table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1679 | local n=function(...)return W("debug",e{...});end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1680 | local E=function(...)return W("warn",e{...});end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1681 | local ce=1 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1682 | local f=m"type" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1683 | local b=m"pairs" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1684 | local ue=m"ipairs" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1685 | local y=m"tonumber" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1686 | local l=m"tostring" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1687 | local t=m"table" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1688 | local a=m"string" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1689 | local e=m"coroutine" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1690 | local Y=math.min |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1691 | local re=math.huge |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1692 | local pe=t.concat |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1693 | local he=t.insert |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1694 | local we=a.sub |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1695 | local fe=e.wrap |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1696 | local me=e.yield |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1697 | local O,e=pcall(require,"ssl") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1698 | local g=m"socket"or require"socket" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1699 | local F=g.gettime |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1700 | local ee=g.dns.getaddrinfo |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1701 | local ye=(O and e.wrap) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1702 | local te=g.bind |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1703 | local ve=g.select |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1704 | local I |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1705 | local B |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1706 | local ae |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1707 | local G |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1708 | local J |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1709 | local u |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1710 | local ie |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1711 | local X |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1712 | local se |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1713 | local ne |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1714 | local oe |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1715 | local Q |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1716 | local s |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1717 | local le |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1718 | local Z |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1719 | local de |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1720 | local p |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1721 | local i |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1722 | local P |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1723 | local r |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1724 | local h |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1725 | local T |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1726 | local v |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1727 | local w |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1728 | local k |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1729 | local x |
12 | 1730 | local a |
1731 | local o | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1732 | local q |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1733 | local C |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1734 | local M |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1735 | local A |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1736 | local j |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1737 | local N |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1738 | local K |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1739 | local d |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1740 | local H |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1741 | local S |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1742 | local R |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1743 | local D |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1744 | local L |
12 | 1745 | local z |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1746 | local _ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1747 | local U |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1748 | p={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1749 | i={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1750 | r={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1751 | P={} |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1752 | h={} |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1753 | v={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1754 | w={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1755 | T={} |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1756 | k={} |
12 | 1757 | a=0 |
1758 | o=0 | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1759 | q=0 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1760 | C=0 |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1761 | M=0 |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1762 | A=1 |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1763 | j=128 |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1764 | N=10 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1765 | H=51e3*1024 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1766 | S=25e3*1024 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1767 | R=30 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1768 | D=6e4 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1769 | L=14*60 |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1770 | local e=package.config:sub(1,1)=="\\" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1771 | _=(e and math.huge)or g._SETSIZE or 1024 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1772 | z=g._SETSIZE or 1024 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1773 | U=30 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1774 | ne=function(y,t,m,c,g,w) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1775 | if t:getfd()>=_ then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1776 | E("server.lua: Disallowed FD number: "..t:getfd()) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1777 | t:close() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1778 | return nil,"fd-too-large" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1779 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1780 | local f=0 |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1781 | local v,e=y.onconnect,y.ondisconnect |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1782 | local b=t.accept |
12 | 1783 | local e={} |
1784 | e.shutdown=function()end | |
1785 | e.ssl=function() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1786 | return w~=nil |
12 | 1787 | end |
1788 | e.sslctx=function() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1789 | return w |
12 | 1790 | end |
1791 | e.remove=function() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1792 | f=f-1 |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1793 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1794 | e.resume() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1795 | end |
12 | 1796 | end |
1797 | e.close=function() | |
1798 | t:close() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1799 | o=s(r,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1800 | a=s(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1801 | p[m..":"..c]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1802 | h[t]=nil |
12 | 1803 | e=nil |
1804 | t=nil | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1805 | n"server.lua: closed server handler and removed sockets from list" |
12 | 1806 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1807 | e.pause=function(o) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1808 | if not e.paused then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1809 | a=s(i,t,a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1810 | if o then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1811 | h[t]=nil |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1812 | t:close() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1813 | t=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1814 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1815 | e.paused=true; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1816 | n("server.lua: server [",m,"]:",c," paused") |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1817 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1818 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1819 | e.resume=function() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1820 | if e.paused then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1821 | if not t then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1822 | t=te(m,c,j); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1823 | t:settimeout(0) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1824 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1825 | a=u(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1826 | h[t]=e |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1827 | k[e]=nil |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1828 | e.paused=false; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1829 | n("server.lua: server [",m,"]:",c," resumed") |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1830 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1831 | end |
12 | 1832 | e.ip=function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1833 | return m |
12 | 1834 | end |
1835 | e.serverport=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1836 | return c |
12 | 1837 | end |
1838 | e.socket=function() | |
1839 | return t | |
1840 | end | |
1841 | e.readbuffer=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1842 | if a>=z or o>=z then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1843 | e.pause() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1844 | k[e]=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1845 | n("server.lua: refused new client connection: server full") |
12 | 1846 | return false |
1847 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1848 | local t,o=b(t) |
12 | 1849 | if t then |
1850 | local o,a=t:getpeername() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1851 | local t,i,e=Z(e,y,t,o,c,a,g,w) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1852 | if e then |
12 | 1853 | return false |
1854 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1855 | f=f+1 |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1856 | n("server.lua: accepted new client connection from ",l(o),":",l(a)," to ",l(c)) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1857 | if v and not w then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1858 | return v(t); |
12 | 1859 | end |
1860 | return; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1861 | elseif o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1862 | n("server.lua: error with new client connection: ",l(o)) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1863 | e.pause() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1864 | k[e]=d |
12 | 1865 | return false |
1866 | end | |
1867 | end | |
1868 | return e | |
1869 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1870 | Z=function(p,f,t,z,K,A,N,g) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1871 | if t:getfd()>=_ then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1872 | E("server.lua: Disallowed FD number: "..t:getfd()) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1873 | t:close() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1874 | if p then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1875 | k[p]=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1876 | p.pause() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1877 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1878 | return nil,nil,"fd-too-large" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1879 | end |
12 | 1880 | t:settimeout(0) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1881 | local y |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1882 | local _ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1883 | local q |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1884 | local V |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1885 | local P=f.onincoming |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1886 | local Y=f.onstatus |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1887 | local k=f.ondisconnect |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1888 | local D=f.ondrain |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1889 | local Q=f.onreadtimeout; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1890 | local R=f.ondetach |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1891 | local b={} |
12 | 1892 | local c=0 |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1893 | local B |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1894 | local L |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1895 | local m=0 |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1896 | local j=false |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1897 | local E=false |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1898 | local W,F=0,0 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1899 | local H=H |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1900 | local S=S |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1901 | local e=b |
12 | 1902 | e.dispatch=function() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1903 | return P |
12 | 1904 | end |
1905 | e.disconnect=function() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1906 | return k |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1907 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1908 | e.onreadtimeout=Q; |
12 | 1909 | e.setlistener=function(a,t) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1910 | if R then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1911 | R(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1912 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1913 | P=t.onincoming |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1914 | k=t.ondisconnect |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1915 | Y=t.onstatus |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1916 | D=t.ondrain |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1917 | e.onreadtimeout=t.onreadtimeout |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1918 | R=t.ondetach |
12 | 1919 | end |
1920 | e.getstats=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1921 | return F,W |
12 | 1922 | end |
1923 | e.ssl=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1924 | return V |
12 | 1925 | end |
1926 | e.sslctx=function() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1927 | return g |
12 | 1928 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1929 | e.send=function(n,o,a,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1930 | return y(t,o,a,i) |
12 | 1931 | end |
1932 | e.receive=function(o,a) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1933 | return _(t,o,a) |
12 | 1934 | end |
1935 | e.shutdown=function(a) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1936 | return q(t,a) |
12 | 1937 | end |
1938 | e.setoption=function(i,a,o) | |
1939 | if t.setoption then | |
1940 | return t:setoption(a,o); | |
1941 | end | |
1942 | return false,"setoption not implemented"; | |
1943 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1944 | e.force_close=function(t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1945 | if c~=0 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1946 | n("server.lua: discarding unwritten data for ",l(z),":",l(A)) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1947 | c=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1948 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1949 | return t:close(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1950 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1951 | e.close=function(l,d) |
12 | 1952 | if not e then return true;end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1953 | a=s(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1954 | v[e]=nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1955 | if c~=0 then |
12 | 1956 | e.sendbuffer() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1957 | if c~=0 then |
12 | 1958 | if e then |
1959 | e.write=nil | |
1960 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1961 | B=true |
12 | 1962 | return false |
1963 | end | |
1964 | end | |
1965 | if t then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1966 | x=q and q(t) |
12 | 1967 | t:close() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1968 | o=s(r,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1969 | h[t]=nil |
12 | 1970 | t=nil |
1971 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1972 | n"server.lua: socket already closed" |
12 | 1973 | end |
1974 | if e then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1975 | w[e]=nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1976 | T[e]=nil |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1977 | local t=e; |
12 | 1978 | e=nil |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1979 | if k then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1980 | k(t,d or false); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1981 | k=nil |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1982 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1983 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1984 | if p then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1985 | p.remove() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1986 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1987 | n"server.lua: closed client handler and removed socket from list" |
12 | 1988 | return true |
1989 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1990 | e.server=function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1991 | return p |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
1992 | end |
12 | 1993 | e.ip=function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1994 | return z |
12 | 1995 | end |
1996 | e.serverport=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
1997 | return K |
12 | 1998 | end |
1999 | e.clientport=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2000 | return A |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2001 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2002 | e.port=e.clientport |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2003 | local p=function(i,a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2004 | if not e then return false end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2005 | m=m+#a |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2006 | if m>H then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2007 | T[e]="send buffer exceeded" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2008 | e.write=G |
12 | 2009 | return false |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2010 | elseif t and not r[t]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2011 | o=u(r,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2012 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2013 | c=c+1 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2014 | b[c]=a |
12 | 2015 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2016 | w[e]=w[e]or d |
12 | 2017 | end |
2018 | return true | |
2019 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2020 | e.write=p |
12 | 2021 | e.bufferqueue=function(t) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2022 | return b |
12 | 2023 | end |
2024 | e.socket=function(a) | |
2025 | return t | |
2026 | end | |
2027 | e.set_mode=function(a,t) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2028 | N=t or N |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2029 | return N |
12 | 2030 | end |
2031 | e.set_send=function(a,t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2032 | y=t or y |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2033 | return y |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2034 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2035 | e.bufferlen=function(o,a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2036 | H=t or H |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2037 | S=a or S |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2038 | return m,S,H |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2039 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2040 | e.lock_read=function(n,o) |
12 | 2041 | if o==true then |
2042 | local o=a | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2043 | a=s(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2044 | v[e]=nil |
12 | 2045 | if a~=o then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2046 | j=true |
12 | 2047 | end |
2048 | elseif o==false then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2049 | if j then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2050 | j=false |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2051 | a=u(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2052 | v[e]=d |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2053 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2054 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2055 | return j |
12 | 2056 | end |
2057 | e.pause=function(t) | |
2058 | return t:lock_read(true); | |
2059 | end | |
2060 | e.resume=function(t) | |
2061 | return t:lock_read(false); | |
2062 | end | |
2063 | e.lock=function(i,a) | |
2064 | e.lock_read(a) | |
2065 | if a==true then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2066 | e.write=G |
12 | 2067 | local a=o |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2068 | o=s(r,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2069 | w[e]=nil |
12 | 2070 | if o~=a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2071 | E=true |
12 | 2072 | end |
2073 | elseif a==false then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2074 | e.write=p |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2075 | if E then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2076 | E=false |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2077 | p("") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2078 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2079 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2080 | return j,E |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2081 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2082 | local p=function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2083 | local a,t,o=_(t,N) |
12 | 2084 | if not t or(t=="wantread"or t=="timeout")then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2085 | local o=a or o or"" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2086 | local a=#o |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2087 | if a>S then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2088 | e:close("receive buffer exceeded") |
12 | 2089 | return false |
2090 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2091 | local a=a*ce |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2092 | F=F+a |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2093 | M=M+a |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2094 | v[e]=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2095 | return P(e,o,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2096 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2097 | n("server.lua: client ",l(z),":",l(A)," read error: ",l(t)) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2098 | x=e and e:force_close(t) |
12 | 2099 | return false |
2100 | end | |
2101 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2102 | local v=function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2103 | local f,a,h,i,u; |
12 | 2104 | if t then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2105 | i=pe(b,"",1,c) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2106 | f,a,h=y(t,i,1,m) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2107 | u=(f or h or 0)*ce |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2108 | W=W+u |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2109 | C=C+u |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2110 | for e=c,1,-1 do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2111 | b[e]=nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2112 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2113 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2114 | f,a,u=false,"unexpected close",0; |
12 | 2115 | end |
2116 | if f then | |
2117 | c=0 | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2118 | m=0 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2119 | o=s(r,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2120 | w[e]=nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2121 | if D then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2122 | D(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2123 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2124 | x=L and e:starttls(nil) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2125 | x=B and e:force_close() |
12 | 2126 | return true |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2127 | elseif h and(a=="timeout"or a=="wantwrite")then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2128 | i=we(i,h+1,m) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2129 | b[1]=i |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2130 | c=1 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2131 | m=m-h |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2132 | w[e]=d |
12 | 2133 | return true |
2134 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2135 | n("server.lua: client ",l(z),":",l(A)," write error: ",l(a)) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2136 | x=e and e:force_close(a) |
12 | 2137 | return false |
2138 | end | |
2139 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2140 | local d; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2141 | function e.set_sslctx(w,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2142 | g=t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2143 | local m,l |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2144 | d=fe(function(h) |
12 | 2145 | local t |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2146 | for d=1,U do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2147 | o=(l and s(r,h,o))or o |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2148 | a=(m and s(i,h,a))or a |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2149 | m,l=nil,nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2150 | d,t=h:dohandshake() |
12 | 2151 | if not t then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2152 | n("server.lua: ssl handshake done") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2153 | e.readbuffer=p |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2154 | e.sendbuffer=v |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2155 | d=Y and Y(e,"ssl-handshake-complete") |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2156 | if w.autostart_ssl and f.onconnect then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2157 | f.onconnect(w); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2158 | if c~=0 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2159 | o=u(r,h,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2160 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2161 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2162 | a=u(i,h,a) |
12 | 2163 | return true |
2164 | else | |
2165 | if t=="wantwrite"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2166 | o=u(r,h,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2167 | l=true |
12 | 2168 | elseif t=="wantread"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2169 | a=u(i,h,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2170 | m=true |
12 | 2171 | else |
2172 | break; | |
2173 | end | |
2174 | t=nil; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2175 | me() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2176 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2177 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2178 | t="ssl handshake error: "..(t or"handshake too long"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2179 | n("server.lua: ",t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2180 | x=e and e:force_close(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2181 | return false,t |
12 | 2182 | end |
2183 | ) | |
2184 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2185 | if O then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2186 | e.starttls=function(f,m) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2187 | if m then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2188 | e:set_sslctx(m); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2189 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2190 | if c>0 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2191 | n"server.lua: we need to do tls, but delaying until send buffer empty" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2192 | L=true |
12 | 2193 | return |
2194 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2195 | n("server.lua: attempting to start tls on "..l(t)) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2196 | local c,m=t |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2197 | t,m=ye(t,g) |
12 | 2198 | if not t then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2199 | n("server.lua: error while starting tls on client: ",l(m or"unknown error")) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2200 | return nil,m |
12 | 2201 | end |
2202 | t:settimeout(0) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2203 | y=t.send |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2204 | _=t.receive |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2205 | q=I |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2206 | h[t]=e |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2207 | a=u(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2208 | a=s(i,c,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2209 | o=s(r,c,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2210 | h[c]=nil |
12 | 2211 | e.starttls=nil |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2212 | L=nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2213 | V=true |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2214 | e.readbuffer=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2215 | e.sendbuffer=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2216 | return d(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2217 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2218 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2219 | e.readbuffer=p |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2220 | e.sendbuffer=v |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2221 | y=t.send |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2222 | _=t.receive |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2223 | q=(V and I)or t.shutdown |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2224 | h[t]=e |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2225 | a=u(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2226 | if g and O then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2227 | n"server.lua: auto-starting ssl negotiation..." |
12 | 2228 | e.autostart_ssl=true; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2229 | local t,e=e:starttls(g); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2230 | if t==false then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2231 | return nil,nil,e |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2232 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2233 | end |
12 | 2234 | return e,t |
2235 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2236 | I=function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2237 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2238 | G=function() |
12 | 2239 | return false |
2240 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2241 | u=function(t,a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2242 | if not t[a]then |
12 | 2243 | e=e+1 |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2244 | t[e]=a |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2245 | t[a]=e |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2246 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2247 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2248 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2249 | s=function(e,i,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2250 | local a=e[i] |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2251 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2252 | e[i]=nil |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2253 | local o=e[t] |
12 | 2254 | e[t]=nil |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2255 | if o~=i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2256 | e[o]=a |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2257 | e[a]=o |
12 | 2258 | end |
2259 | return t-1 | |
2260 | end | |
2261 | return t | |
2262 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2263 | Q=function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2264 | o=s(r,e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2265 | a=s(i,e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2266 | h[e]=nil |
12 | 2267 | e:close() |
2268 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2269 | local function x(e,t,o) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2270 | local a; |
12 | 2271 | local i=t.sendbuffer; |
2272 | function t.sendbuffer() | |
2273 | i(); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2274 | if a and t.bufferlen()<o then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2275 | e:lock_read(false); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2276 | a=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2277 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2278 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2279 | local i=e.readbuffer; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2280 | function e.readbuffer() |
12 | 2281 | i(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2282 | if not a and t.bufferlen()>=o then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2283 | a=true; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2284 | e:lock_read(true); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2285 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2286 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2287 | e:set_mode("*a"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2288 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2289 | ie=function(t,e,d,l,r) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2290 | t=t or"*" |
12 | 2291 | local o |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2292 | if f(d)~="table"then |
12 | 2293 | o="invalid listener table" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2294 | elseif f(t)~="string"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2295 | o="invalid address" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2296 | elseif f(e)~="number"or not(e>=0 and e<=65535)then |
12 | 2297 | o="invalid port" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2298 | elseif p[t..":"..e]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2299 | o="listeners on '["..t.."]:"..e.."' already exist" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2300 | elseif r and not O then |
12 | 2301 | o="luasec not found" |
2302 | end | |
2303 | if o then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2304 | E("server.lua, [",t,"]:",e,": ",o) |
12 | 2305 | return nil,o |
2306 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2307 | local o,s=te(t,e,j) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2308 | if s then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2309 | E("server.lua, [",t,"]:",e,": ",s) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2310 | return nil,s |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2311 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2312 | local s,d=ne(d,o,t,e,l,r) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2313 | if not s then |
12 | 2314 | o:close() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2315 | return nil,d |
12 | 2316 | end |
2317 | o:settimeout(0) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2318 | a=u(i,o,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2319 | p[t..":"..e]=s |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2320 | h[o]=s |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2321 | n("server.lua: new "..(r and"ssl "or"").."server listener on '[",t,"]:",e,"'") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2322 | return s |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2323 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2324 | se=function(t,e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2325 | return p[t..":"..e]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2326 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2327 | le=function(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2328 | local a=p[t..":"..e] |
12 | 2329 | if not a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2330 | return nil,"no server found on '["..t.."]:"..l(e).."'" |
12 | 2331 | end |
2332 | a:close() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2333 | p[t..":"..e]=nil |
12 | 2334 | return true |
2335 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2336 | J=function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2337 | for e,t in b(h)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2338 | t:close() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2339 | h[e]=nil |
12 | 2340 | end |
2341 | a=0 | |
2342 | o=0 | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2343 | q=0 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2344 | p={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2345 | i={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2346 | r={} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2347 | P={} |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2348 | h={} |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2349 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2350 | oe=function() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2351 | return{ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2352 | select_timeout=A; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2353 | tcp_backlog=j; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2354 | max_send_buffer_size=H; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2355 | max_receive_buffer_size=S; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2356 | select_idle_check_interval=R; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2357 | send_timeout=D; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2358 | read_timeout=L; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2359 | max_connections=z; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2360 | max_ssl_handshake_roundtrips=U; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2361 | highest_allowed_fd=_; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2362 | accept_retry_interval=N; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2363 | } |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2364 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2365 | de=function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2366 | if f(e)~="table"then |
12 | 2367 | return nil,"invalid settings table" |
2368 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2369 | A=y(e.select_timeout)or A |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2370 | H=y(e.max_send_buffer_size)or H |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2371 | S=y(e.max_receive_buffer_size)or S |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2372 | R=y(e.select_idle_check_interval)or R |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2373 | j=y(e.tcp_backlog)or j |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2374 | D=y(e.send_timeout)or D |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2375 | L=y(e.read_timeout)or L |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2376 | N=y(e.accept_retry_interval)or N |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2377 | z=e.max_connections or z |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2378 | U=e.max_ssl_handshake_roundtrips or U |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2379 | _=e.highest_allowed_fd or _ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2380 | return true |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2381 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2382 | X=function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2383 | if f(e)~="function"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2384 | return nil,"invalid listener function" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2385 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2386 | q=q+1 |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2387 | P[q]=e |
12 | 2388 | return true |
2389 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2390 | local l do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2391 | local a={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2392 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2393 | function l(t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2394 | local o=F(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2395 | t=t+o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2396 | if t>=o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2397 | he(e,{t,a}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2398 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2399 | local e=a(o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2400 | if e and f(e)=="number"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2401 | return l(e,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2402 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2403 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2404 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2405 | X(function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2406 | if#e>0 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2407 | for o,t in b(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2408 | he(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2409 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2410 | e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2411 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2412 | local e=re; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2413 | for n,o in b(a)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2414 | local i,o=o[1],o[2]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2415 | if i<=t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2416 | a[n]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2417 | local t=o(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2418 | if f(t)=="number"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2419 | l(t,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2420 | e=Y(e,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2421 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2422 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2423 | e=Y(e,i-t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2424 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2425 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2426 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2427 | end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2428 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2429 | ae=function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2430 | return M,C,a,o,q |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2431 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2432 | local e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2433 | local function p(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2434 | e=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2435 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2436 | B=function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2437 | if e then return"quitting";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2438 | if t then e="once";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2439 | d=F() |
12 | 2440 | repeat |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2441 | local t=re; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2442 | for e=1,q do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2443 | local e=P[e](d) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2444 | if e then t=Y(t,e);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2445 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2446 | local t,a,o=ve(i,r,Y(A,t)) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2447 | for t,e in ue(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2448 | local t=h[e] |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2449 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2450 | t.readbuffer() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2451 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2452 | Q(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2453 | n"server.lua: found no handler and closed socket (readlist)" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2454 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2455 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2456 | for t,e in ue(a)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2457 | local t=h[e] |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2458 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2459 | t.sendbuffer() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2460 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2461 | Q(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2462 | n"server.lua: found no handler and closed socket (writelist)" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2463 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2464 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2465 | for e,t in b(T)do |
12 | 2466 | e.disconnect()(e,t) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2467 | e:force_close() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2468 | T[e]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2469 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2470 | d=F() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2471 | if d-K>R then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2472 | K=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2473 | for e,t in b(w)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2474 | if d-t>D then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2475 | e.disconnect()(e,"send timeout") |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2476 | e:force_close() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2477 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2478 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2479 | for e,t in b(v)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2480 | if d-t>L then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2481 | if not(e.onreadtimeout)or e:onreadtimeout()~=true then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2482 | e.disconnect()(e,"read timeout") |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2483 | e:close() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2484 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2485 | v[e]=d |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2486 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2487 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2488 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2489 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2490 | for e,t in b(k)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2491 | if d-t>N then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2492 | k[e]=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2493 | e.resume(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2494 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2495 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2496 | until e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2497 | if e=="once"then e=nil;return;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2498 | J(); |
12 | 2499 | return"quitting" |
2500 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2501 | local function k() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2502 | return B(true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2503 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2504 | local function y() |
12 | 2505 | return"select"; |
2506 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2507 | local c=function(l,e,t,n,d,s) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2508 | local e,t,d=Z(nil,n,l,e,t,"clientport",d,s) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2509 | if not e then return nil,d end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2510 | h[t]=e |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2511 | if not s then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2512 | a=u(i,t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2513 | o=u(r,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2514 | if n.onconnect then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2515 | local t=e.sendbuffer; |
12 | 2516 | e.sendbuffer=function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2517 | e.sendbuffer=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2518 | n.onconnect(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2519 | return t(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2520 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2521 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2522 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2523 | return e,t |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2524 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2525 | local b=function(a,t,n,s,i,o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2526 | local e |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2527 | if f(n)~="table"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2528 | e="invalid listener table" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2529 | elseif f(a)~="string"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2530 | e="invalid address" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2531 | elseif f(t)~="number"or not(t>=0 and t<=65535)then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2532 | e="invalid port" |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2533 | elseif i and not O then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2534 | e="luasec not found" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2535 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2536 | if ee and not o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2537 | local e,t=ee(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2538 | if not e then return nil,t end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2539 | if e[1]and e[1].family=="inet6"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2540 | o="tcp6" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2541 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2542 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2543 | local o=g[o or"tcp"] |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2544 | if f(o)~="function"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2545 | e="invalid socket type" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2546 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2547 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2548 | E("server.lua, addclient: ",e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2549 | return nil,e |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2550 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2551 | local e,o=o() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2552 | if o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2553 | return nil,o |
12 | 2554 | end |
2555 | e:settimeout(0) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2556 | local h,o=e:connect(a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2557 | if h or o=="timeout"or o=="Operation already in progress"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2558 | return c(e,a,t,n,s,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2559 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2560 | return nil,o |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2561 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2562 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2563 | local g=function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2564 | local e=e.conn; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2565 | o=s(r,e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2566 | a=s(i,e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2567 | h[e]=nil |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2568 | end; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2569 | local t=function(n,t,d) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2570 | local e=n.conn |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2571 | h[e]=n |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2572 | if t~=nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2573 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2574 | a=u(i,e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2575 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2576 | o=s(r,e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2577 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2578 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2579 | if d~=nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2580 | if d then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2581 | o=u(r,e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2582 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2583 | a=s(i,e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2584 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2585 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2586 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2587 | local t=function(e,o,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2588 | local i=e |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2589 | if f(e)=="number"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2590 | i={getfd=function()return e;end} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2591 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2592 | local e={ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2593 | conn=i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2594 | readbuffer=o or I; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2595 | sendbuffer=a or I; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2596 | close=g; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2597 | setflags=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2598 | }; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2599 | t(e,o,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2600 | return e |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2601 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2602 | m"setmetatable"(h,{__mode="k"}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2603 | m"setmetatable"(v,{__mode="k"}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2604 | m"setmetatable"(w,{__mode="k"}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2605 | K=F() |
12 | 2606 | local function a(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2607 | local t=W; |
12 | 2608 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2609 | W=e; |
12 | 2610 | end |
2611 | return t; | |
2612 | end | |
2613 | return{ | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2614 | _addtimer=X, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2615 | add_task=l; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2616 | addclient=b, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2617 | wrapclient=c, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2618 | watchfd=t, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2619 | loop=B, |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2620 | link=x, |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2621 | step=k, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2622 | stats=ae, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2623 | closeall=J, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2624 | addserver=ie, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2625 | getserver=se, |
12 | 2626 | setlogger=a, |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2627 | getsettings=oe, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2628 | setquitting=p, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2629 | removeserver=le, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2630 | get_backend=y, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2631 | changesettings=de, |
12 | 2632 | } |
2633 | end) | |
2634 | package.preload['util.xmppstream']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2635 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2636 | local function o(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2637 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2638 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2639 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2640 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2641 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2642 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2643 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2644 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2645 | end |
12 | 2646 | local e=require"lxp"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2647 | local t=require"util.stanza"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2648 | local p=t.stanza_mt; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2649 | local f=error; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2650 | local t=tostring; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2651 | local l=table.insert; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2652 | local w=table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2653 | local T=table.remove; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2654 | local y=setmetatable; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2655 | local x=pcall(e.new,{StartDoctypeDecl=false}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2656 | local z=pcall(e.new,{XmlDecl=false}); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2657 | local a=not not e.new({}).getcurrentbytecount; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2658 | local _=1024*1024*10; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2659 | o"xmppstream" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2660 | local k=e.new; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2661 | local E={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2662 | ["http://www.w3.org/XML/1998/namespace\1lang"]="xml:lang"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2663 | ["http://www.w3.org/XML/1998/namespace\1space"]="xml:space"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2664 | ["http://www.w3.org/XML/1998/namespace\1base"]="xml:base"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2665 | ["http://www.w3.org/XML/1998/namespace\1id"]="xml:id"; |
12 | 2666 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2667 | local o="http://etherx.jabber.org/streams"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2668 | local d="\1"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2669 | local b="^([^"..d.."]*)"..d.."?(.*)$"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2670 | _M.ns_separator=d; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2671 | _M.ns_pattern=b; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2672 | local function s()end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2673 | function new_sax_handlers(n,e,h) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2674 | local i={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2675 | local g=e.streamopened; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2676 | local v=e.streamclosed; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2677 | local u=e.error or function(o,a,e)f("XML stream error: "..t(a)..(e and": "..t(e)or""),2);end; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2678 | local k=e.handlestanza; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2679 | h=h or s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2680 | local t=e.stream_ns or o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2681 | local m=e.stream_tag or"stream"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2682 | if t~=""then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2683 | m=t..d..m; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2684 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2685 | local q=t..d..(e.error_tag or"error"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2686 | local j=e.default_ns; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2687 | local d={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2688 | local s,e={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2689 | local t=0; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2690 | local r=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2691 | function i:StartElement(c,o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2692 | if e and#s>0 then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2693 | l(e,w(s)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2694 | s={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2695 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2696 | local s,i=c:match(b); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2697 | if i==""then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2698 | s,i="",s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2699 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2700 | if s~=j or r>0 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2701 | o.xmlns=s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2702 | r=r+1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2703 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2704 | for t=1,#o do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2705 | local e=o[t]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2706 | o[t]=nil; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2707 | local t=E[e]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2708 | if t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2709 | o[t]=o[e]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2710 | o[e]=nil; |
12 | 2711 | end |
2712 | end | |
2713 | if not e then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2714 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2715 | t=self:getcurrentbytecount(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2716 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2717 | if n.notopen then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2718 | if c==m then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2719 | r=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2720 | if g then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2721 | if a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2722 | h(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2723 | t=0; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2724 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2725 | g(n,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2726 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2727 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2728 | u(n,"no-stream",c); |
12 | 2729 | end |
2730 | return; | |
2731 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2732 | if s=="jabber:client"and i~="iq"and i~="presence"and i~="message"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2733 | u(n,"invalid-top-level-element"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2734 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2735 | e=y({name=i,attr=o,tags={}},p); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2736 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2737 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2738 | t=t+self:getcurrentbytecount(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2739 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2740 | l(d,e); |
12 | 2741 | local t=e; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2742 | e=y({name=i,attr=o,tags={}},p); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2743 | l(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2744 | l(t.tags,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2745 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2746 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2747 | if z then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2748 | function i:XmlDecl(e,e,e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2749 | if a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2750 | h(self:getcurrentbytecount()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2751 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2752 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2753 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2754 | function i:StartCdataSection() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2755 | if a then |
12 | 2756 | if e then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2757 | t=t+self:getcurrentbytecount(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2758 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2759 | h(self:getcurrentbytecount()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2760 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2761 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2762 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2763 | function i:EndCdataSection() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2764 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2765 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2766 | t=t+self:getcurrentbytecount(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2767 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2768 | h(self:getcurrentbytecount()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2769 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2770 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2771 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2772 | function i:CharacterData(o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2773 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2774 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2775 | t=t+self:getcurrentbytecount(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2776 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2777 | l(s,o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2778 | elseif a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2779 | h(self:getcurrentbytecount()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2780 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2781 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2782 | function i:EndElement(o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2783 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2784 | t=t+self:getcurrentbytecount() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2785 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2786 | if r>0 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2787 | r=r-1; |
12 | 2788 | end |
2789 | if e then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2790 | if#s>0 then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2791 | l(e,w(s)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2792 | s={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2793 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2794 | if#d==0 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2795 | if a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2796 | h(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2797 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2798 | t=0; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2799 | if o~=q then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2800 | k(n,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2801 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2802 | u(n,"stream-error",e); |
12 | 2803 | end |
2804 | e=nil; | |
2805 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2806 | e=T(d); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2807 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2808 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2809 | if v then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2810 | v(n); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2811 | end |
12 | 2812 | end |
2813 | end | |
2814 | local function a(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2815 | u(n,"parse-error","restricted-xml","Restricted XML, see RFC 6120 section 11.1."); |
12 | 2816 | if not e.stop or not e:stop()then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2817 | f("Failed to abort parsing"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2818 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2819 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2820 | if x then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2821 | i.StartDoctypeDecl=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2822 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2823 | i.Comment=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2824 | i.ProcessingInstruction=a; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2825 | local function a() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2826 | e,s,t=nil,{},0; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2827 | d={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2828 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2829 | local function e(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2830 | n=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2831 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2832 | return i,{reset=a,set_session=e}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2833 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2834 | function new(n,i,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2835 | local e=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2836 | local t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2837 | if a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2838 | function t(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2839 | e=e-t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2840 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2841 | o=o or _; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2842 | elseif o then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2843 | f("Stanza size limits are not supported on this version of LuaExpat") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2844 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2845 | local i,n=new_sax_handlers(n,i,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2846 | local t=k(i,d,false); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2847 | local s=t.parse; |
12 | 2848 | return{ |
2849 | reset=function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2850 | t=k(i,d,false); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2851 | s=t.parse; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2852 | e=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2853 | n.reset(); |
12 | 2854 | end, |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2855 | feed=function(n,i) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2856 | if a then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2857 | e=e+#i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2858 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2859 | local i,t=s(t,i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2860 | if a and e>o then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2861 | return nil,"stanza-too-large"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2862 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2863 | return i,t; |
12 | 2864 | end, |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2865 | set_session=n.set_session; |
12 | 2866 | }; |
2867 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2868 | return _M; |
12 | 2869 | end) |
2870 | package.preload['util.jid']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2871 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2872 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2873 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2874 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2875 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2876 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2877 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2878 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2879 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2880 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2881 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2882 | local t,s=string.match,string.sub; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2883 | local l=require"util.encodings".stringprep.nodeprep; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2884 | local d=require"util.encodings".stringprep.nameprep; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2885 | local r=require"util.encodings".stringprep.resourceprep; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2886 | local n={ |
12 | 2887 | [" "]="\\20";['"']="\\22"; |
2888 | ["&"]="\\26";["'"]="\\27"; | |
2889 | ["/"]="\\2f";[":"]="\\3a"; | |
2890 | ["<"]="\\3c";[">"]="\\3e"; | |
2891 | ["@"]="\\40";["\\"]="\\5c"; | |
2892 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2893 | local i={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2894 | for e,t in pairs(n)do i[t]=e;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2895 | a"jid" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2896 | local function o(e) |
12 | 2897 | if not e then return;end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2898 | local i,a=t(e,"^([^@/]+)@()"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2899 | local a,o=t(e,"^([^@/]+)()",a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2900 | if i and not a then return nil,nil,nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2901 | local t=t(e,"^/(.+)$",o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2902 | if(not a)or((not t)and#e>=o)then return nil,nil,nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2903 | return i,a,t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2904 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2905 | split=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2906 | function bare(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2907 | local t,e=o(e); |
12 | 2908 | if t and e then |
2909 | return t.."@"..e; | |
2910 | end | |
2911 | return e; | |
2912 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2913 | local function h(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2914 | local a,e,t=o(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2915 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2916 | if s(e,-1,-1)=="."then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2917 | e=s(e,1,-2); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2918 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2919 | e=d(e); |
12 | 2920 | if not e then return;end |
2921 | if a then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2922 | a=l(a); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2923 | if not a then return;end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2924 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2925 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2926 | t=r(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2927 | if not t then return;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2928 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2929 | return a,e,t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2930 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2931 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2932 | prepped_split=h; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2933 | function prep(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2934 | local a,e,t=h(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2935 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2936 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2937 | e=a.."@"..e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2938 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2939 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2940 | e=e.."/"..t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2941 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2942 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2943 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2944 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2945 | function join(a,e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2946 | if a and e and t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2947 | return a.."@"..e.."/"..t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2948 | elseif a and e then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2949 | return a.."@"..e; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2950 | elseif e and t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
2951 | return e.."/"..t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2952 | elseif e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2953 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2954 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2955 | return nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2956 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2957 | function compare(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2958 | local n,i,s=o(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2959 | local a,t,e=o(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2960 | if((a~=nil and a==n)or a==nil)and |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2961 | ((t~=nil and t==i)or t==nil)and |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2962 | ((e~=nil and e==s)or e==nil)then |
12 | 2963 | return true |
2964 | end | |
2965 | return false | |
2966 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2967 | function escape(e)return e and(e:gsub(".",n));end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2968 | function unescape(e)return e and(e:gsub("\\%x%x",i));end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2969 | return _M; |
12 | 2970 | end) |
2971 | package.preload['util.events']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2972 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2973 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2974 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2975 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2976 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2977 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2978 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2979 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2980 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2981 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2982 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2983 | local i=pairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2984 | local r=table.insert; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2985 | local s=table.sort; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2986 | local h=setmetatable; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2987 | local n=next; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2988 | a"events" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2989 | function new() |
12 | 2990 | local t={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2991 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2992 | local function o(o,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2993 | local e=e[a]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2994 | if not e or n(e)==nil then return;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2995 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2996 | for e in i(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2997 | r(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2998 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
2999 | s(t,function(a,t)return e[a]>e[t];end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3000 | o[a]=t; |
12 | 3001 | return t; |
3002 | end; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3003 | h(t,{__index=o}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3004 | local function h(o,i,n) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3005 | local a=e[o]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3006 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3007 | a[i]=n or 0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3008 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3009 | a={[i]=n or 0}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3010 | e[o]=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3011 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3012 | t[o]=nil; |
12 | 3013 | end; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3014 | local function s(o,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3015 | local a=e[o]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3016 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3017 | a[i]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3018 | t[o]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3019 | if n(a)==nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3020 | e[o]=nil; |
12 | 3021 | end |
3022 | end | |
3023 | end; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3024 | local function n(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3025 | for t,e in i(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3026 | h(t,e); |
12 | 3027 | end |
3028 | end; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3029 | local function a(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3030 | for t,e in i(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3031 | s(t,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3032 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3033 | end; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3034 | local function o(e,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3035 | local e=t[e]; |
12 | 3036 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3037 | for t=1,#e do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3038 | local e=e[t](...); |
12 | 3039 | if e~=nil then return e;end |
3040 | end | |
3041 | end | |
3042 | end; | |
3043 | return{ | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3044 | add_handler=h; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3045 | remove_handler=s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3046 | add_handlers=n; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3047 | remove_handlers=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3048 | fire_event=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3049 | _handlers=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3050 | _event_map=e; |
12 | 3051 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3052 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3053 | return _M; |
12 | 3054 | end) |
3055 | package.preload['util.dataforms']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3056 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3057 | local function o(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3058 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3059 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3060 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3061 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3062 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3063 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3064 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3065 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3066 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3067 | local a=setmetatable; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3068 | local e,i=pairs,ipairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3069 | local h,r,c=tostring,type,next; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3070 | local s=table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3071 | local u=require"util.stanza"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3072 | local d=require"util.jid".prep; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3073 | o"dataforms" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3074 | local l='jabber:x:data'; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3075 | local n={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3076 | local e={__index=n}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3077 | function new(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3078 | return a(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3079 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3080 | function from_stanza(e) |
12 | 3081 | local o={ |
3082 | title=e:get_child_text("title"); | |
3083 | instructions=e:get_child_text("instructions"); | |
3084 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3085 | for t in e:childtags("field")do |
12 | 3086 | local a={ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3087 | name=t.attr.var; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3088 | label=t.attr.label; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3089 | type=t.attr.type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3090 | required=t:get_child("required")and true or nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3091 | value=t:get_child_text("value"); |
12 | 3092 | }; |
3093 | o[#o+1]=a; | |
3094 | if a.type then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3095 | local e={}; |
12 | 3096 | if a.type:match"list%-"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3097 | for t in t:childtags("option")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3098 | e[#e+1]={label=t.attr.label,value=t:get_child_text("value")}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3099 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3100 | for t in t:childtags("value")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3101 | e[#e+1]={label=t.attr.label,value=t:get_text(),default=true}; |
12 | 3102 | end |
3103 | elseif a.type:match"%-multi"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3104 | for t in t:childtags("value")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3105 | e[#e+1]=t.attr.label and{label=t.attr.label,value=t:get_text()}or t:get_text(); |
12 | 3106 | end |
3107 | if a.type=="text-multi"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3108 | a.value=s(e,"\n"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3109 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3110 | a.value=e; |
12 | 3111 | end |
3112 | end | |
3113 | end | |
3114 | end | |
3115 | return new(o); | |
3116 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3117 | function n.form(t,n,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3118 | local e=u.stanza("x",{xmlns=l,type=e or"form"}); |
12 | 3119 | if t.title then |
3120 | e:tag("title"):text(t.title):up(); | |
3121 | end | |
3122 | if t.instructions then | |
3123 | e:tag("instructions"):text(t.instructions):up(); | |
3124 | end | |
3125 | for t,o in i(t)do | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3126 | local a=o.type or"text-single"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3127 | e:tag("field",{type=a,var=o.name,label=o.label}); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3128 | local t=(n and n[o.name])or o.value; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3129 | if t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3130 | if a=="hidden"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3131 | if r(t)=="table"then |
12 | 3132 | e:tag("value") |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3133 | :add_child(t) |
12 | 3134 | :up(); |
3135 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3136 | e:tag("value"):text(h(t)):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3137 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3138 | elseif a=="boolean"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3139 | e:tag("value"):text((t and"1")or"0"):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3140 | elseif a=="fixed"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3141 | elseif a=="jid-multi"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3142 | for a,t in i(t)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3143 | e:tag("value"):text(t):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3144 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3145 | elseif a=="jid-single"then |
12 | 3146 | e:tag("value"):text(t):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3147 | elseif a=="text-single"or a=="text-private"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3148 | e:tag("value"):text(t):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3149 | elseif a=="text-multi"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3150 | for t in t:gmatch("([^\r\n]+)\r?\n*")do |
12 | 3151 | e:tag("value"):text(t):up(); |
3152 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3153 | elseif a=="list-single"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3154 | local a=false; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3155 | for o,t in i(t)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3156 | if r(t)=="table"then |
12 | 3157 | e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3158 | if t.default and(not a)then |
12 | 3159 | e:tag("value"):text(t.value):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3160 | a=true; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3161 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3162 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3163 | e:tag("option",{label=t}):tag("value"):text(h(t)):up():up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3164 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3165 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3166 | elseif a=="list-multi"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3167 | for a,t in i(t)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3168 | if r(t)=="table"then |
12 | 3169 | e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up(); |
3170 | if t.default then | |
3171 | e:tag("value"):text(t.value):up(); | |
3172 | end | |
3173 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3174 | e:tag("option",{label=t}):tag("value"):text(h(t)):up():up(); |
12 | 3175 | end |
3176 | end | |
3177 | end | |
3178 | end | |
3179 | if o.required then | |
3180 | e:tag("required"):up(); | |
3181 | end | |
3182 | e:up(); | |
3183 | end | |
3184 | return e; | |
3185 | end | |
3186 | local e={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3187 | function n.data(t,n) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3188 | local o={}; |
12 | 3189 | local a={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3190 | for i,t in i(t)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3191 | local i; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3192 | for e in n:childtags()do |
12 | 3193 | if t.name==e.attr.var then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3194 | i=e; |
12 | 3195 | break; |
3196 | end | |
3197 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3198 | if not i then |
12 | 3199 | if t.required then |
3200 | a[t.name]="Required value missing"; | |
3201 | end | |
3202 | else | |
3203 | local e=e[t.type]; | |
3204 | if e then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3205 | o[t.name],a[t.name]=e(i,t.required); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3206 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3207 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3208 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3209 | if c(a)then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3210 | return o,a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3211 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3212 | return o; |
12 | 3213 | end |
3214 | e["text-single"]= | |
3215 | function(t,a) | |
3216 | local t=t:get_child_text("value"); | |
3217 | if t and#t>0 then | |
3218 | return t | |
3219 | elseif a then | |
3220 | return nil,"Required value missing"; | |
3221 | end | |
3222 | end | |
3223 | e["text-private"]= | |
3224 | e["text-single"]; | |
3225 | e["jid-single"]= | |
3226 | function(t,o) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3227 | local t=t:get_child_text("value") |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3228 | local a=d(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3229 | if a and#a>0 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3230 | return a |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3231 | elseif t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3232 | return nil,"Invalid JID: "..t; |
12 | 3233 | elseif o then |
3234 | return nil,"Required value missing"; | |
3235 | end | |
3236 | end | |
3237 | e["jid-multi"]= | |
3238 | function(o,i) | |
3239 | local a={}; | |
3240 | local t={}; | |
3241 | for e in o:childtags("value")do | |
3242 | local e=e:get_text(); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3243 | local o=d(e); |
12 | 3244 | a[#a+1]=o; |
3245 | if e and not o then | |
3246 | t[#t+1]=("Invalid JID: "..e); | |
3247 | end | |
3248 | end | |
3249 | if#a>0 then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3250 | return a,(#t>0 and s(t,"\n")or nil); |
12 | 3251 | elseif i then |
3252 | return nil,"Required value missing"; | |
3253 | end | |
3254 | end | |
3255 | e["list-multi"]= | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3256 | function(o,a) |
12 | 3257 | local t={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3258 | for e in o:childtags("value")do |
12 | 3259 | t[#t+1]=e:get_text(); |
3260 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3261 | return t,(a and#t==0 and"Required value missing"or nil); |
12 | 3262 | end |
3263 | e["text-multi"]= | |
3264 | function(t,a) | |
3265 | local t,a=e["list-multi"](t,a); | |
3266 | if t then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3267 | t=s(t,"\n"); |
12 | 3268 | end |
3269 | return t,a; | |
3270 | end | |
3271 | e["list-single"]= | |
3272 | e["text-single"]; | |
3273 | local a={ | |
3274 | ["1"]=true,["true"]=true, | |
3275 | ["0"]=false,["false"]=false, | |
3276 | }; | |
3277 | e["boolean"]= | |
3278 | function(t,o) | |
3279 | local t=t:get_child_text("value"); | |
3280 | local a=a[t~=nil and t]; | |
3281 | if a~=nil then | |
3282 | return a; | |
3283 | elseif t then | |
3284 | return nil,"Invalid boolean representation"; | |
3285 | elseif o then | |
3286 | return nil,"Required value missing"; | |
3287 | end | |
3288 | end | |
3289 | e["hidden"]= | |
3290 | function(e) | |
3291 | return e:get_child_text("value"); | |
3292 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3293 | return _M; |
12 | 3294 | end) |
3295 | package.preload['util.caps']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3296 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3297 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3298 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3299 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3300 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3301 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3302 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3303 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3304 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3305 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3306 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3307 | local l=require"util.encodings".base64.encode; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3308 | local d=require"util.hashes".sha1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3309 | local n,s,h=table.insert,table.sort,table.concat; |
12 | 3310 | local r=ipairs; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3311 | a"caps" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3312 | function calculate_hash(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3313 | local a,o,i={},{},{}; |
12 | 3314 | for t,e in r(e)do |
3315 | if e.name=="identity"then | |
3316 | n(a,(e.attr.category or"").."\0"..(e.attr.type or"").."\0"..(e.attr["xml:lang"]or"").."\0"..(e.attr.name or"")); | |
3317 | elseif e.name=="feature"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3318 | n(o,e.attr.var or""); |
12 | 3319 | elseif e.name=="x"and e.attr.xmlns=="jabber:x:data"then |
3320 | local t={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3321 | local o; |
12 | 3322 | for a,e in r(e.tags)do |
3323 | if e.name=="field"and e.attr.var then | |
3324 | local a={}; | |
3325 | for t,e in r(e.tags)do | |
3326 | e=#e.tags==0 and e:get_text(); | |
3327 | if e then n(a,e);end | |
3328 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3329 | s(a); |
12 | 3330 | if e.attr.var=="FORM_TYPE"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3331 | o=a[1]; |
12 | 3332 | elseif#a>0 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3333 | n(t,e.attr.var.."\0"..h(a,"<")); |
12 | 3334 | else |
3335 | n(t,e.attr.var); | |
3336 | end | |
3337 | end | |
3338 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3339 | s(t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3340 | t=h(t,"<"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3341 | if o then t=o.."\0"..t;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3342 | n(i,t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3343 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3344 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3345 | s(a); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3346 | s(o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3347 | s(i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3348 | if#a>0 then a=h(a,"<"):gsub("%z","/").."<";else a="";end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3349 | if#o>0 then o=h(o,"<").."<";else o="";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3350 | if#i>0 then i=h(i,"<"):gsub("%z","<").."<";else i="";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3351 | local e=a..o..i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3352 | local t=l(d(e)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3353 | print(("CAPS %q %q"):format(t,e)); |
12 | 3354 | return t,e; |
3355 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3356 | return _M; |
12 | 3357 | end) |
3358 | package.preload['util.vcard']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3359 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3360 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3361 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3362 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3363 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3364 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3365 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3366 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3367 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3368 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3369 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3370 | local i=require"util.stanza"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3371 | local a,h=table.insert,table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3372 | local s=type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3373 | local e,n,c=next,pairs,ipairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3374 | local d,r,l,u; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3375 | local m="\n"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3376 | local o; |
12 | 3377 | local function e() |
3378 | error"Not implemented" | |
3379 | end | |
3380 | local function e() | |
3381 | error"Not implemented" | |
3382 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3383 | local function y(e) |
12 | 3384 | return e:gsub("[,:;\\]","\\%1"):gsub("\n","\\n"); |
3385 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3386 | local function p(e) |
12 | 3387 | return e:gsub("\\?[\\nt:;,]",{ |
3388 | ["\\\\"]="\\", | |
3389 | ["\\n"]="\n", | |
3390 | ["\\r"]="\r", | |
3391 | ["\\t"]="\t", | |
3392 | ["\\:"]=":", | |
3393 | ["\\;"]=";", | |
3394 | ["\\,"]=",", | |
3395 | [":"]="\29", | |
3396 | [";"]="\30", | |
3397 | [","]="\31", | |
3398 | }); | |
3399 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3400 | local function w(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3401 | local a=i.stanza(e.name,{xmlns="vcard-temp"}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3402 | local t=o[e.name]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3403 | if t=="text"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3404 | a:text(e[1]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3405 | elseif s(t)=="table"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3406 | if t.types and e.TYPE then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3407 | if s(e.TYPE)=="table"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3408 | for o,t in n(t.types)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3409 | for o,e in n(e.TYPE)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3410 | if e:upper()==t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3411 | a:tag(t):up(); |
12 | 3412 | break; |
3413 | end | |
3414 | end | |
3415 | end | |
3416 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3417 | a:tag(e.TYPE:upper()):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3418 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3419 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3420 | if t.props then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3421 | for o,t in n(t.props)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3422 | if e[t]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3423 | a:tag(t):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3424 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3425 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3426 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3427 | if t.value then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3428 | a:tag(t.value):text(e[1]):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3429 | elseif t.values then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3430 | local o=t.values; |
12 | 3431 | local i=o.behaviour=="repeat-last"and o[#o]; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3432 | for o=1,#e do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3433 | a:tag(t.values[o]or i):text(e[o]):up(); |
12 | 3434 | end |
3435 | end | |
3436 | end | |
3437 | return a; | |
3438 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3439 | local function f(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3440 | local e=i.stanza("vCard",{xmlns="vcard-temp"}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3441 | for a=1,#t do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3442 | e:add_child(w(t[a])); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3443 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3444 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3445 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3446 | function u(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3447 | if not e[1]or e[1].name then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3448 | return f(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3449 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3450 | local t=i.stanza("xCard",{xmlns="vcard-temp"}); |
12 | 3451 | for a=1,#e do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3452 | t:add_child(f(e[a])); |
12 | 3453 | end |
3454 | return t; | |
3455 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3456 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3457 | function d(t) |
12 | 3458 | t=t |
3459 | :gsub("\r\n","\n") | |
3460 | :gsub("\n ","") | |
3461 | :gsub("\n\n+","\n"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3462 | local s={}; |
12 | 3463 | local e; |
3464 | for t in t:gmatch("[^\n]+")do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3465 | local t=p(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3466 | local n,t,i=t:match("^([-%a]+)(\30?[^\29]*)\29(.*)$"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3467 | i=i:gsub("\29",":"); |
12 | 3468 | if#t>0 then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3469 | local o={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3470 | for a,n,i in t:gmatch("\30([^=]+)(=?)([^\30]*)")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3471 | a=a:upper(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3472 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3473 | for t in i:gmatch("[^\31]+")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3474 | e[#e+1]=t |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3475 | e[t]=true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3476 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3477 | if n=="="then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3478 | o[a]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3479 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3480 | o[a]=true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3481 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3482 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3483 | t=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3484 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3485 | if n=="BEGIN"and i=="VCARD"then |
12 | 3486 | e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3487 | s[#s+1]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3488 | elseif n=="END"and i=="VCARD"then |
12 | 3489 | e=nil; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3490 | elseif e and o[n]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3491 | local o=o[n]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3492 | local n={name=n}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3493 | e[#e+1]=n; |
12 | 3494 | local s=e; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3495 | e=n; |
12 | 3496 | if o.types then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3497 | for o,a in c(o.types)do |
12 | 3498 | local a=a:lower(); |
3499 | if(t.TYPE and t.TYPE[a]==true) | |
3500 | or t[a]==true then | |
3501 | e.TYPE=a; | |
3502 | end | |
3503 | end | |
3504 | end | |
3505 | if o.props then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3506 | for o,a in c(o.props)do |
12 | 3507 | if t[a]then |
3508 | if t[a]==true then | |
3509 | e[a]=true; | |
3510 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3511 | for o,t in c(t[a])do |
12 | 3512 | e[a]=t; |
3513 | end | |
3514 | end | |
3515 | end | |
3516 | end | |
3517 | end | |
3518 | if o=="text"or o.value then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3519 | a(e,i); |
12 | 3520 | elseif o.values then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3521 | local t="\30"..i; |
12 | 3522 | for t in t:gmatch("\30([^\30]*)")do |
3523 | a(e,t); | |
3524 | end | |
3525 | end | |
3526 | e=s; | |
3527 | end | |
3528 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3529 | return s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3530 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3531 | local function i(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3532 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3533 | for a=1,#t do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3534 | e[a]=y(t[a]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3535 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3536 | e=h(e,";"); |
12 | 3537 | local a=""; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3538 | for t,e in n(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3539 | if s(t)=="string"and t~="name"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3540 | a=a..(";%s=%s"):format(t,s(e)=="table"and h(e,",")or e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3541 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3542 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3543 | return("%s%s:%s"):format(t.name,a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3544 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3545 | local function t(t) |
12 | 3546 | local e={}; |
3547 | a(e,"BEGIN:VCARD") | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3548 | for o=1,#t do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3549 | a(e,i(t[o])); |
12 | 3550 | end |
3551 | a(e,"END:VCARD") | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3552 | return h(e,m); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3553 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3554 | function r(e) |
12 | 3555 | if e[1]and e[1].name then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3556 | return t(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3557 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3558 | local o={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3559 | for a=1,#e do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3560 | o[a]=t(e[a]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3561 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3562 | return h(o,m); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3563 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3564 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3565 | local function h(i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3566 | local t=i.name; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3567 | local e=o[t]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3568 | local t={name=t}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3569 | if e=="text"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3570 | t[1]=i:get_text(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3571 | elseif s(e)=="table"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3572 | if e.value then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3573 | t[1]=i:get_child_text(e.value)or""; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3574 | elseif e.values then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3575 | local e=e.values; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3576 | if e.behaviour=="repeat-last"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3577 | for e=1,#i.tags do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3578 | a(t,i.tags[e]:get_text()or""); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3579 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3580 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3581 | for o=1,#e do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3582 | a(t,i:get_child_text(e[o])or""); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3583 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3584 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3585 | elseif e.names then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3586 | local e=e.names; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3587 | for a=1,#e do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3588 | if i:get_child(e[a])then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3589 | t[1]=e[a]; |
12 | 3590 | break; |
3591 | end | |
3592 | end | |
3593 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3594 | if e.props_verbatim then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3595 | for a,e in n(e.props_verbatim)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3596 | t[a]=e; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3597 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3598 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3599 | if e.types then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3600 | local e=e.types; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3601 | t.TYPE={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3602 | for o=1,#e do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3603 | if i:get_child(e[o])then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3604 | a(t.TYPE,e[o]:lower()); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3605 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3606 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3607 | if#t.TYPE==0 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3608 | t.TYPE=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3609 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3610 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3611 | if e.props then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3612 | local e=e.props; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3613 | for o=1,#e do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3614 | local e=e[o] |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3615 | local o=i:get_child_text(e); |
12 | 3616 | if o then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3617 | t[e]=t[e]or{}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3618 | a(t[e],o); |
12 | 3619 | end |
3620 | end | |
3621 | end | |
3622 | else | |
3623 | return nil | |
3624 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3625 | return t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3626 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3627 | local function i(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3628 | local e=e.tags; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3629 | local t={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3630 | for o=1,#e do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3631 | a(t,h(e[o])); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3632 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3633 | return t |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3634 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3635 | function l(e) |
12 | 3636 | if e.attr.xmlns~="vcard-temp"then |
3637 | return nil,"wrong-xmlns"; | |
3638 | end | |
3639 | if e.name=="xCard"then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3640 | local a={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3641 | local t=e.tags; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3642 | for e=1,#t do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3643 | a[e]=i(t[e]); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3644 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3645 | return a |
12 | 3646 | elseif e.name=="vCard"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3647 | return i(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3648 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3649 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3650 | o={ |
12 | 3651 | VERSION="text", |
3652 | FN="text", | |
3653 | N={ | |
3654 | values={ | |
3655 | "FAMILY", | |
3656 | "GIVEN", | |
3657 | "MIDDLE", | |
3658 | "PREFIX", | |
3659 | "SUFFIX", | |
3660 | }, | |
3661 | }, | |
3662 | NICKNAME="text", | |
3663 | PHOTO={ | |
3664 | props_verbatim={ENCODING={"b"}}, | |
3665 | props={"TYPE"}, | |
3666 | value="BINVAL", | |
3667 | }, | |
3668 | BDAY="text", | |
3669 | ADR={ | |
3670 | types={ | |
3671 | "HOME", | |
3672 | "WORK", | |
3673 | "POSTAL", | |
3674 | "PARCEL", | |
3675 | "DOM", | |
3676 | "INTL", | |
3677 | "PREF", | |
3678 | }, | |
3679 | values={ | |
3680 | "POBOX", | |
3681 | "EXTADD", | |
3682 | "STREET", | |
3683 | "LOCALITY", | |
3684 | "REGION", | |
3685 | "PCODE", | |
3686 | "CTRY", | |
3687 | } | |
3688 | }, | |
3689 | LABEL={ | |
3690 | types={ | |
3691 | "HOME", | |
3692 | "WORK", | |
3693 | "POSTAL", | |
3694 | "PARCEL", | |
3695 | "DOM", | |
3696 | "INTL", | |
3697 | "PREF", | |
3698 | }, | |
3699 | value="LINE", | |
3700 | }, | |
3701 | TEL={ | |
3702 | types={ | |
3703 | "HOME", | |
3704 | "WORK", | |
3705 | "VOICE", | |
3706 | "FAX", | |
3707 | "PAGER", | |
3708 | "MSG", | |
3709 | "CELL", | |
3710 | "VIDEO", | |
3711 | "BBS", | |
3712 | "MODEM", | |
3713 | "ISDN", | |
3714 | "PCS", | |
3715 | "PREF", | |
3716 | }, | |
3717 | value="NUMBER", | |
3718 | }, | |
3719 | EMAIL={ | |
3720 | types={ | |
3721 | "HOME", | |
3722 | "WORK", | |
3723 | "INTERNET", | |
3724 | "PREF", | |
3725 | "X400", | |
3726 | }, | |
3727 | value="USERID", | |
3728 | }, | |
3729 | JABBERID="text", | |
3730 | MAILER="text", | |
3731 | TZ="text", | |
3732 | GEO={ | |
3733 | values={ | |
3734 | "LAT", | |
3735 | "LON", | |
3736 | }, | |
3737 | }, | |
3738 | TITLE="text", | |
3739 | ROLE="text", | |
3740 | LOGO="copy of PHOTO", | |
3741 | AGENT="text", | |
3742 | ORG={ | |
3743 | values={ | |
3744 | behaviour="repeat-last", | |
3745 | "ORGNAME", | |
3746 | "ORGUNIT", | |
3747 | } | |
3748 | }, | |
3749 | CATEGORIES={ | |
3750 | values="KEYWORD", | |
3751 | }, | |
3752 | NOTE="text", | |
3753 | PRODID="text", | |
3754 | REV="text", | |
3755 | SORTSTRING="text", | |
3756 | SOUND="copy of PHOTO", | |
3757 | UID="text", | |
3758 | URL="text", | |
3759 | CLASS={ | |
3760 | names={ | |
3761 | "PUBLIC", | |
3762 | "PRIVATE", | |
3763 | "CONFIDENTIAL", | |
3764 | }, | |
3765 | }, | |
3766 | KEY={ | |
3767 | props={"TYPE"}, | |
3768 | value="CRED", | |
3769 | }, | |
3770 | DESC="text", | |
3771 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3772 | o.LOGO=o.PHOTO; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3773 | o.SOUND=o.PHOTO; |
12 | 3774 | return{ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3775 | from_text=d; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3776 | to_text=r; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3777 | from_xep54=l; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3778 | to_xep54=u; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3779 | lua_to_text=r; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3780 | lua_to_xep54=u; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3781 | text_to_lua=d; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3782 | text_to_xep54=function(...)return u(d(...));end; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3783 | xep54_to_lua=l; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3784 | xep54_to_text=function(...)return r(l(...))end; |
12 | 3785 | }; |
3786 | end) | |
3787 | package.preload['util.logger']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3788 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3789 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3790 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3791 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3792 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3793 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3794 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3795 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3796 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3797 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3798 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3799 | local e=pcall; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3800 | local e=string.find; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3801 | local e,o,e=ipairs,pairs,setmetatable; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3802 | local a={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3803 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3804 | local t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3805 | function a.init(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3806 | local a=t(e,"debug"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3807 | local o=t(e,"info"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3808 | local i=t(e,"warn"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3809 | local n=t(e,"error"); |
12 | 3810 | return function(t,e,...) |
3811 | if t=="debug"then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3812 | return a(e,...); |
12 | 3813 | elseif t=="info"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3814 | return o(e,...); |
12 | 3815 | elseif t=="warn"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3816 | return i(e,...); |
12 | 3817 | elseif t=="error"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3818 | return n(e,...); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3819 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3820 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3821 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3822 | function t(o,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3823 | local t=e[a]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3824 | if not t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3825 | t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3826 | e[a]=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3827 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3828 | local e=function(e,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3829 | for i=1,#t do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3830 | t[i](o,a,e,...); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3831 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3832 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3833 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3834 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3835 | function a.reset() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3836 | for t,e in o(e)do |
12 | 3837 | for t=1,#e do |
3838 | e[t]=nil; | |
3839 | end | |
3840 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3841 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3842 | function a.add_level_sink(t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3843 | if not e[t]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3844 | e[t]={o}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3845 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3846 | e[t][#e[t]+1]=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3847 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3848 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3849 | a.new=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3850 | return a; |
12 | 3851 | end) |
3852 | package.preload['util.datetime']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3853 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3854 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3855 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3856 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3857 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3858 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3859 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3860 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3861 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3862 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3863 | end |
12 | 3864 | local e=os.date; |
3865 | local i=os.time; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3866 | local u=os.difftime; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3867 | local t=error; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3868 | local s=tonumber; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3869 | a"datetime" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3870 | function date(t) |
12 | 3871 | return e("!%Y-%m-%d",t); |
3872 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3873 | function datetime(t) |
12 | 3874 | return e("!%Y-%m-%dT%H:%M:%SZ",t); |
3875 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3876 | function time(t) |
12 | 3877 | return e("!%H:%M:%S",t); |
3878 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3879 | function legacy(t) |
12 | 3880 | return e("!%Y%m%dT%H:%M:%S",t); |
3881 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3882 | function parse(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3883 | if o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3884 | local n,h,l,d,r,t,a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3885 | n,h,l,d,r,t,a=o:match("^(%d%d%d%d)%-?(%d%d)%-?(%d%d)T(%d%d):(%d%d):(%d%d)%.?%d*([Z+%-]?.*)$"); |
12 | 3886 | if n then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3887 | local u=u(i(e("*t")),i(e("!*t"))); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3888 | local o=0; |
12 | 3889 | if a~=""and a~="Z"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3890 | local a,t,e=a:match("([+%-])(%d%d):?(%d*)"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3891 | if not a then return;end |
12 | 3892 | if#e~=2 then e="0";end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3893 | t,e=s(t),s(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3894 | o=t*60*60+e*60; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3895 | if a=="-"then o=-o;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3896 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3897 | t=(t+u)-o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3898 | return i({year=n,month=h,day=l,hour=d,min=r,sec=t,isdst=false}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3899 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3900 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3901 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3902 | return _M; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3903 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3904 | package.preload['util.json']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3905 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3906 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3907 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3908 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3909 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3910 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3911 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3912 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3913 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3914 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3915 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3916 | local w=type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3917 | local t,v,p,q=table.insert,table.concat,table.remove,table.sort; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3918 | local h=string.char; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3919 | local j,l=tostring,tonumber; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3920 | local u,s=pairs,ipairs; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3921 | local i=next; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3922 | local e=error; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3923 | local e,r,b=newproxy,getmetatable,setmetatable; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3924 | local c=print; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3925 | local a,o=pcall(require,"util.array"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3926 | local f=a and r(o())or{}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3927 | local a={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3928 | local n=e and e(true)or{}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3929 | if r and r(n)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3930 | r(n).__tostring=function()return"null";end; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3931 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3932 | a.null=n; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3933 | local y={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3934 | ["\""]="\\\"",["\\"]="\\\\",["\b"]="\\b", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3935 | ["\f"]="\\f",["\n"]="\\n",["\r"]="\\r",["\t"]="\\t"}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3936 | local e={ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3937 | ["\""]="\"",["\\"]="\\",["/"]="/", |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3938 | b="\b",f="\f",n="\n",r="\r",t="\t"}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3939 | for e=0,31 do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3940 | local t=h(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3941 | if not y[t]then y[t]=("\\u%.4X"):format(e);end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3942 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3943 | local function x(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3944 | if e<128 then return h(e);end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3945 | local t=e%64; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3946 | if e<2048 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3947 | local e=(e-t)/64; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3948 | return h(128+64+e,128+t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3949 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3950 | local a=e%4096; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3951 | local o=(a-t)/64; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3952 | local e=(e-a)/4096; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3953 | return h(128+64+32+e,128+o,128+t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3954 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3955 | local g={ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3956 | number=true, |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3957 | string=true, |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3958 | table=true, |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3959 | boolean=true |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3960 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3961 | local z={ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3962 | __array=true; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3963 | __hash=true; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3964 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3965 | local o,k,d,m; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3966 | function m(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3967 | t(e,"\""..(a:gsub(".",y)).."\""); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3968 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3969 | function d(a,e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3970 | t(e,"["); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3971 | if i(a)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3972 | for i,a in s(a)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3973 | o(a,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3974 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3975 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3976 | p(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3977 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3978 | t(e,"]"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3979 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3980 | function k(l,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3981 | local a={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3982 | local r={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3983 | local h={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3984 | for t,e in s(l)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3985 | a[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3986 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3987 | for e,t in u(l)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3988 | local o,i=w(e),w(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3989 | if g[i]or t==n then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3990 | if o=="string"and not z[e]then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3991 | h[e]=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3992 | elseif(g[o]or e==n)and a[e]==nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3993 | r[e]=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3994 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3995 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3996 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3997 | if i(r)~=nil or i(h)~=nil or i(a)==nil then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
3998 | t(e,"{"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
3999 | local n=#e; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4000 | if e.ordered then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4001 | local a={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4002 | for e in u(h)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4003 | t(a,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4004 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4005 | q(a); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4006 | for i,a in s(a)do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4007 | m(a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4008 | t(e,":"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4009 | o(h[a],e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4010 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4011 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4012 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4013 | for a,i in u(h)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4014 | m(a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4015 | t(e,":"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4016 | o(i,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4017 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4018 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4019 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4020 | if i(r)~=nil then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4021 | t(e,"\"__hash\":["); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4022 | for i,a in u(r)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4023 | o(i,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4024 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4025 | o(a,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4026 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4027 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4028 | p(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4029 | t(e,"]"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4030 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4031 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4032 | if i(a)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4033 | t(e,"\"__array\":"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4034 | d(a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4035 | t(e,","); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4036 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4037 | if n~=#e then p(e);end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4038 | t(e,"}"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4039 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4040 | d(a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4041 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4042 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4043 | function o(e,a) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4044 | local o=w(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4045 | if o=="number"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4046 | t(a,j(e)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4047 | elseif o=="string"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4048 | m(e,a); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4049 | elseif o=="table"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4050 | local t=r(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4051 | if t==f then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4052 | d(e,a); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4053 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4054 | k(e,a); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4055 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4056 | elseif o=="boolean"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4057 | t(a,(e and"true"or"false")); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4058 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4059 | t(a,"null"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4060 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4061 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4062 | function a.encode(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4063 | local e={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4064 | o(t,e); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4065 | return v(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4066 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4067 | function a.encode_ordered(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4068 | local e={ordered=true}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4069 | o(t,e); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4070 | return v(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4071 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4072 | function a.encode_array(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4073 | local e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4074 | d(t,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4075 | return v(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4076 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4077 | local function o(t,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4078 | return t:find("[^ \t\r\n]",e)or e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4079 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4080 | local function d(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4081 | local a=e.__array; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4082 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4083 | e.__array=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4084 | for o,a in s(a)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4085 | t(e,a); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4086 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4087 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4088 | local a=e.__hash; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4089 | if a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4090 | e.__hash=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4091 | local t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4092 | for o,a in s(a)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4093 | if t~=nil then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4094 | e[t]=a;t=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4095 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4096 | t=a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4097 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4098 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4099 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4100 | return e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4101 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4102 | local i,r; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4103 | local function m(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4104 | local s={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4105 | while true do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4106 | local n,a; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4107 | e=o(t,e+1); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4108 | if t:byte(e)~=34 then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4109 | if t:byte(e)==125 then return s,e+1;end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4110 | return nil,"key expected"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4111 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4112 | n,e=r(t,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4113 | if n==nil then return nil,e;end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4114 | e=o(t,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4115 | if t:byte(e)~=58 then return nil,"colon expected";end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4116 | a,e=i(t,e+1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4117 | if a==nil then return nil,e;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4118 | s[n]=a; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4119 | e=o(t,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4120 | local t=t:byte(e); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4121 | if t==125 then return d(s),e+1;end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4122 | if t~=44 then return nil,"object eof";end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4123 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4124 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4125 | local function u(n,e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4126 | local s={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4127 | local h=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4128 | while true do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4129 | local a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4130 | a,e=i(n,e+1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4131 | if a==nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4132 | if n:byte(h+1)==93 then return b(s,f),h+2;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4133 | return a,e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4134 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4135 | t(s,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4136 | e=o(n,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4137 | local t=n:byte(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4138 | if t==93 then return b(s,f),e+1;end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4139 | if t~=44 then return nil,"array eof";end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4140 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4141 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4142 | local t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4143 | local function e(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4144 | local e,t=l(e:sub(3,6),16),l(e:sub(9,12),16); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4145 | local e=e*1024+t-56613888; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4146 | local a=e%64; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4147 | e=(e-a)/64; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4148 | local t=e%64; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4149 | e=(e-t)/64; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4150 | local o=e%64; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4151 | e=(e-o)/64; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4152 | return h(240+e,128+o,128+t,128+a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4153 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4154 | local function s(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4155 | e=e:match("%x%x%x%x",3); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4156 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4157 | return x(l(e,16)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4158 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4159 | t=true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4160 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4161 | function r(o,e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4162 | e=e+1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4163 | local a=o:find("\"",e,true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4164 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4165 | local e=o:sub(e,a-1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4166 | t=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4167 | e=e:gsub("\\u.?.?.?.?",s); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4168 | if t then return nil,"invalid escape";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4169 | return e,a+1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4170 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4171 | return nil,"string eof"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4172 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4173 | local function d(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4174 | local t=t:match("[0-9%.%-eE%+]+",e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4175 | return l(t),e+#t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4176 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4177 | local function s(t,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4178 | local o,a,t=t:byte(e+1,e+3); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4179 | if o==117 and a==108 and t==108 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4180 | return n,e+4; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4181 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4182 | return nil,"null parse failed"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4183 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4184 | local function n(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4185 | local a,t,o=t:byte(e+1,e+3); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4186 | if a==114 and t==117 and o==101 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4187 | return true,e+4; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4188 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4189 | return nil,"true parse failed"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4190 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4191 | local function h(t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4192 | local t,a,o,i=t:byte(e+1,e+4); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4193 | if t==97 and a==108 and o==115 and i==101 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4194 | return false,e+5; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4195 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4196 | return nil,"false parse failed"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4197 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4198 | function i(a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4199 | t=o(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4200 | local e=a:byte(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4201 | if e==123 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4202 | return m(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4203 | elseif e==91 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4204 | return u(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4205 | elseif e==34 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4206 | return r(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4207 | elseif e~=nil and e>=48 and e<=57 or e==45 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4208 | return d(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4209 | elseif e==110 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4210 | return s(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4211 | elseif e==116 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4212 | return n(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4213 | elseif e==102 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4214 | return h(a,t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4215 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4216 | return nil,"value expected"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4217 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4218 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4219 | local t={ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4220 | ["\\\""]="\\u0022"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4221 | ["\\\\"]="\\u005c"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4222 | ["\\/"]="\\u002f"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4223 | ["\\b"]="\\u0008"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4224 | ["\\f"]="\\u000C"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4225 | ["\\n"]="\\u000A"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4226 | ["\\r"]="\\u000D"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4227 | ["\\t"]="\\u0009"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4228 | ["\\u"]="\\u"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4229 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4230 | function a.decode(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4231 | e=e:gsub("\\.",t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4232 | local t,a=i(e,1); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4233 | if t==nil then return t,a;end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4234 | if e:find("[^ \t\r\n]",a)then return nil,"garbage at eof";end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4235 | return t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4236 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4237 | function a.test(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4238 | local e=a.encode(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4239 | local t=a.decode(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4240 | local t=a.encode(t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4241 | if e~=t then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4242 | c("FAILED"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4243 | c("encoded:",e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4244 | c("recoded:",t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4245 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4246 | c(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4247 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4248 | return e==t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4249 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4250 | return a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4251 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4252 | package.preload['util.xml']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4253 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4254 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4255 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4256 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4257 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4258 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4259 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4260 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4261 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4262 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4263 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4264 | local t=require"util.stanza"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4265 | local h=require"lxp"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4266 | a("xml") |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4267 | local e=(function() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4268 | local n={ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4269 | ["http://www.w3.org/XML/1998/namespace"]="xml"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4270 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4271 | local e="\1"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4272 | local i="^([^"..e.."]*)"..e.."?(.*)$"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4273 | return function(s) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4274 | local o={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4275 | local a=t.stanza("root"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4276 | function o:StartElement(t,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4277 | local t,o=t:match(i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4278 | if o==""then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4279 | t,o="",t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4280 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4281 | if t~=""then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4282 | e.xmlns=t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4283 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4284 | for t=1,#e do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4285 | local a=e[t]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4286 | e[t]=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4287 | local t,o=a:match(i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4288 | if o~=""then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4289 | t=n[t]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4290 | if t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4291 | e[t..":"..o]=e[a]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4292 | e[a]=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4293 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4294 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4295 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4296 | a:tag(o,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4297 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4298 | function o:CharacterData(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4299 | a:text(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4300 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4301 | function o:EndElement(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4302 | a:up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4303 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4304 | local n=h.new(o,"\1"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4305 | local e,i,t,o=n:parse(s); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4306 | if e then e,i,t,o=n:parse();end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4307 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4308 | return a.tags[1]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4309 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4310 | return e,i.." (line "..t..", col "..o..")"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4311 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4312 | end; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4313 | end)(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4314 | parse=e; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4315 | return _M; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4316 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4317 | package.preload['util.rsm']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4318 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4319 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4320 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4321 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4322 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4323 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4324 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4325 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4326 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4327 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4328 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4329 | local h=require"util.stanza".stanza; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4330 | local t,o=tostring,tonumber; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4331 | local n=type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4332 | local s=pairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4333 | local i='http://jabber.org/protocol/rsm'; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4334 | local a={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4335 | do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4336 | local e=a; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4337 | local function t(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4338 | return o((e:get_text())); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4339 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4340 | local function a(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4341 | return t:get_text(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4342 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4343 | e.after=a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4344 | e.before=function(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4345 | local e=e:get_text(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4346 | return e==""or e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4347 | end; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4348 | e.max=t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4349 | e.index=t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4350 | e.first=function(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4351 | return{index=o(e.attr.index);e:get_text()}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4352 | end; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4353 | e.last=a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4354 | e.count=t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4355 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4356 | local r=setmetatable({ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4357 | first=function(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4358 | if n(e)=="table"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4359 | a:tag("first",{index=e.index}):text(e[1]):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4360 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4361 | a:tag("first"):text(t(e)):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4362 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4363 | end; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4364 | before=function(e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4365 | if a==true then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4366 | e:tag("before"):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4367 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4368 | e:tag("before"):text(t(a)):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4369 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4370 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4371 | },{ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4372 | __index=function(e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4373 | return function(e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4374 | e:tag(o):text(t(a)):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4375 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4376 | end; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4377 | }); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4378 | local function t(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4379 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4380 | for o in e:childtags()do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4381 | local e=o.name; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4382 | local a=e and a[e]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4383 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4384 | t[e]=a(o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4385 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4386 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4387 | return t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4388 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4389 | local function n(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4390 | local e=h("set",{xmlns=i}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4391 | for t,o in s(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4392 | if a[t]then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4393 | r[t](e,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4394 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4395 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4396 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4397 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4398 | local function a(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4399 | local e=e:get_child("set",i); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4400 | if e and#e.tags>0 then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4401 | return t(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4402 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4403 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4404 | return{parse=t,generate=n,get=a}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4405 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4406 | package.preload['util.random']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4407 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4408 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4409 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4410 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4411 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4412 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4413 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4414 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4415 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4416 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4417 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4418 | local e=io.open("/dev/urandom","r"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4419 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4420 | return{ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4421 | seed=function()end; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4422 | bytes=function(t)return e:read(t);end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4423 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4424 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4425 | local e=require"crypto" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4426 | return e.rand; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4427 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4428 | package.preload['util.ip']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4429 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4430 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4431 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4432 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4433 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4434 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4435 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4436 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4437 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4438 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4439 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4440 | local o={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4441 | local i={__index=function(t,e)return(o[e])(t);end, |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4442 | __tostring=function(e)return e.addr;end, |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4443 | __eq=function(t,e)return t.addr==e.addr;end}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4444 | local n={["0"]="0000",["1"]="0001",["2"]="0010",["3"]="0011",["4"]="0100",["5"]="0101",["6"]="0110",["7"]="0111",["8"]="1000",["9"]="1001",["A"]="1010",["B"]="1011",["C"]="1100",["D"]="1101",["E"]="1110",["F"]="1111"}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4445 | local function e(e,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4446 | if not t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4447 | local a=e:match("^%x+(.)"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4448 | if a==":"or(not(a)and e:sub(1,1)==":")then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4449 | t="IPv6" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4450 | elseif a=="."then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4451 | t="IPv4" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4452 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4453 | if not t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4454 | return nil,"invalid address"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4455 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4456 | elseif t~="IPv4"and t~="IPv6"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4457 | return nil,"invalid protocol"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4458 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4459 | local a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4460 | if t=="IPv6"and e:find('%',1,true)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4461 | e,a=e:match("^(.-)%%(.*)"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4462 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4463 | if t=="IPv6"and e:find('.',1,true)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4464 | local t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4465 | e,t=e:gsub(":(%d+)%.(%d+)%.(%d+)%.(%d+)$",function(t,e,a,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4466 | return(":%04X:%04X"):format(t*256+e,a*256+o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4467 | end); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4468 | if t~=1 then return nil,"invalid-address";end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4469 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4470 | return setmetatable({addr=e,proto=t,zone=a},i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4471 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4472 | local function i(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4473 | local t=""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4474 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4475 | if a.proto=="IPv4"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4476 | a=a.toV4mapped; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4477 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4478 | a=(a.addr):upper(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4479 | a:gsub("([^:]*):?",function(t)e[#e+1]=t end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4480 | if not a:match(":$")then e[#e]=nil;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4481 | for o,a in ipairs(e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4482 | if a:len()==0 and o~=1 and o~=#e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4483 | for e=1,16*(9-#e)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4484 | t=t.."0"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4485 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4486 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4487 | for e=1,4-a:len()do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4488 | t=t.."0000"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4489 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4490 | for e=1,a:len()do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4491 | t=t..n[a:sub(e,e)]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4492 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4493 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4494 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4495 | return t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4496 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4497 | local function t(a,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4498 | a,t=i(a),i(t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4499 | for e=1,128 do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4500 | if a:sub(e,e)~=t:sub(e,e)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4501 | return e-1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4502 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4503 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4504 | return 128; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4505 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4506 | local function h(t) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4507 | local e={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4508 | t:gsub("([^.]*).?",function(t)e[#e+1]=tonumber(t)end); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4509 | if e[1]==127 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4510 | return 2; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4511 | elseif e[1]==169 and e[2]==254 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4512 | return 2; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4513 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4514 | return 14; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4515 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4516 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4517 | local function r(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4518 | if e:match("^[0:]*1$")then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4519 | return 2; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4520 | elseif e:match("^[Ff][Ee][89ABab]")then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4521 | return 2; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4522 | elseif e:match("^[Ff][Ee][CcDdEeFf]")then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4523 | return 5; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4524 | elseif e:match("^[Ff][Ff]")then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4525 | return tonumber("0x"..e:sub(4,4)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4526 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4527 | return 14; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4528 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4529 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4530 | local function i(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4531 | if t(a,e("::1","IPv6"))==128 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4532 | return 0; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4533 | elseif t(a,e("2002::","IPv6"))>=16 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4534 | return 2; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4535 | elseif t(a,e("2001::","IPv6"))>=32 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4536 | return 5; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4537 | elseif t(a,e("fc00::","IPv6"))>=7 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4538 | return 13; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4539 | elseif t(a,e("fec0::","IPv6"))>=10 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4540 | return 11; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4541 | elseif t(a,e("3ffe::","IPv6"))>=16 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4542 | return 12; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4543 | elseif t(a,e("::","IPv6"))>=96 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4544 | return 3; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4545 | elseif t(a,e("::ffff:0:0","IPv6"))>=96 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4546 | return 4; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4547 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4548 | return 1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4549 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4550 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4551 | local function n(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4552 | if t(a,e("::1","IPv6"))==128 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4553 | return 50; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4554 | elseif t(a,e("2002::","IPv6"))>=16 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4555 | return 30; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4556 | elseif t(a,e("2001::","IPv6"))>=32 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4557 | return 5; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4558 | elseif t(a,e("fc00::","IPv6"))>=7 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4559 | return 3; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4560 | elseif t(a,e("fec0::","IPv6"))>=10 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4561 | return 1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4562 | elseif t(a,e("3ffe::","IPv6"))>=16 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4563 | return 1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4564 | elseif t(a,e("::","IPv6"))>=96 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4565 | return 1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4566 | elseif t(a,e("::ffff:0:0","IPv6"))>=96 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4567 | return 35; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4568 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4569 | return 40; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4570 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4571 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4572 | local function s(o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4573 | local a={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4574 | local t="::ffff:"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4575 | o:gsub("([^.]*).?",function(e)a[#a+1]=tonumber(e)end); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4576 | t=t..("%02x"):format(a[1]); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4577 | t=t..("%02x"):format(a[2]); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4578 | t=t..":" |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4579 | t=t..("%02x"):format(a[3]); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4580 | t=t..("%02x"):format(a[4]); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4581 | return e(t,"IPv6"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4582 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4583 | function o:toV4mapped() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4584 | if self.proto~="IPv4"then return nil,"No IPv4 address"end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4585 | local e=s(self.addr); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4586 | self.toV4mapped=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4587 | return e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4588 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4589 | function o:label() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4590 | local e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4591 | if self.proto=="IPv4"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4592 | e=i(self.toV4mapped); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4593 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4594 | e=i(self); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4595 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4596 | self.label=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4597 | return e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4598 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4599 | function o:precedence() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4600 | local e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4601 | if self.proto=="IPv4"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4602 | e=n(self.toV4mapped); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4603 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4604 | e=n(self); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4605 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4606 | self.precedence=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4607 | return e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4608 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4609 | function o:scope() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4610 | local e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4611 | if self.proto=="IPv4"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4612 | e=h(self.addr); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4613 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4614 | e=r(self.addr); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4615 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4616 | self.scope=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4617 | return e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4618 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4619 | return{new_ip=e, |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4620 | commonPrefixLength=t}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4621 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4622 | package.preload['util.sasl.scram']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4623 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4624 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4625 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4626 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4627 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4628 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4629 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4630 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4631 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4632 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4633 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4634 | local n,u=require"mime".b64,require"mime".unb64; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4635 | local e=require"util.hashes"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4636 | local a=require"bit"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4637 | local s=require"util.random"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4638 | local d=tonumber; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4639 | local h,t=string.char,string.byte; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4640 | local i=string.gsub; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4641 | local r=a.bxor; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4642 | local function l(e,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4643 | return(i(e,"()(.)",function(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4644 | return h(r(t(e),t(o,a))) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4645 | end)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4646 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4647 | local y,t=e.sha1,e.hmac_sha1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4648 | local function w(o,e,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4649 | local e=t(o,e.."\0\0\0\1"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4650 | local a=e; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4651 | for i=2,i do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4652 | e=t(o,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4653 | a=l(a,e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4654 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4655 | return a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4656 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4657 | local function p(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4658 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4659 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4660 | local function a(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4661 | return(i(e,"[,=]",{[","]="=2C",["="]="=3D"})); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4662 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4663 | local function f(e,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4664 | local a="n="..a(e.username); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4665 | local h=n(s.bytes(15)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4666 | local c="r="..h; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4667 | local m=a..","..c; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4668 | local o=""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4669 | local a=e.conn:ssl()and"y"or"n"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4670 | if i=="SCRAM-SHA-1-PLUS"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4671 | o=e.conn:socket():getfinished(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4672 | a="p=tls-unique"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4673 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4674 | local s=a..",,"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4675 | local a=s..m; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4676 | local a,r=coroutine.yield(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4677 | if a~="challenge"then return false end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4678 | local a,i,f=r:match("(r=[^,]+),s=([^,]*),i=(%d+)"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4679 | local d=d(f); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4680 | i=u(i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4681 | if not a or not i or not d then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4682 | return false,"Could not parse server_first_message"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4683 | elseif a:find(h,3,true)~=3 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4684 | return false,"nonce sent by server does not match our nonce"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4685 | elseif a==c then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4686 | return false,"server did not append s-nonce to nonce"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4687 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4688 | local o=s..o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4689 | local o="c="..n(o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4690 | local h=o..","..a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4691 | local o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4692 | local a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4693 | local s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4694 | if e.client_key and e.server_key then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4695 | a=e.client_key; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4696 | s=e.server_key; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4697 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4698 | if e.salted_password then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4699 | o=e.salted_password; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4700 | elseif e.password then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4701 | o=w(p(e.password),i,d); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4702 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4703 | s=t(o,"Server Key"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4704 | a=t(o,"Client Key"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4705 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4706 | local o=y(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4707 | local e=m..","..r..","..h; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4708 | local o=t(o,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4709 | local a=l(a,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4710 | local t=t(s,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4711 | local e="p="..n(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4712 | local e=h..","..e; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4713 | local e,a=coroutine.yield(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4714 | if e~="success"then return false,"success-expected"end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4715 | local e=a:match("v=([^,]+)"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4716 | if u(e)~=t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4717 | return false,"server signature did not match"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4718 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4719 | return true; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4720 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4721 | return function(e,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4722 | if e.username and(e.password or(e.client_key or e.server_key))then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4723 | if t=="SCRAM-SHA-1"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4724 | return f,99; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4725 | elseif t=="SCRAM-SHA-1-PLUS"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4726 | local e=e.conn:ssl()and e.conn:socket(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4727 | if e and e.getfinished then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4728 | return f,100; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4729 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4730 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4731 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4732 | end |
12 | 4733 | end) |
4734 | package.preload['util.sasl.plain']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4735 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4736 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4737 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4738 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4739 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4740 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4741 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4742 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4743 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4744 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4745 | end |
12 | 4746 | return function(e,t) |
4747 | if t=="PLAIN"and e.username and e.password then | |
4748 | return function(e) | |
4749 | return"success"==coroutine.yield("\0"..e.username.."\0"..e.password); | |
4750 | end,5; | |
4751 | end | |
4752 | end | |
4753 | end) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4754 | package.preload['util.sasl.anonymous']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4755 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4756 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4757 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4758 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4759 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4760 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4761 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4762 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4763 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4764 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4765 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4766 | return function(t,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4767 | if e=="ANONYMOUS"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4768 | return function() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4769 | return coroutine.yield()=="success"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4770 | end,0; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4771 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4772 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4773 | end) |
12 | 4774 | package.preload['verse.plugins.tls']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4775 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4776 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4777 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4778 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4779 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4780 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4781 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4782 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4783 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4784 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4785 | end |
12 | 4786 | local a=require"verse"; |
4787 | local t="urn:ietf:params:xml:ns:xmpp-tls"; | |
4788 | function a.plugins.tls(e) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4789 | local function i(o) |
12 | 4790 | if e.authenticated then return;end |
4791 | if o:get_child("starttls",t)and e.conn.starttls then | |
4792 | e:debug("Negotiating TLS..."); | |
4793 | e:send(a.stanza("starttls",{xmlns=t})); | |
4794 | return true; | |
4795 | elseif not e.conn.starttls and not e.secure then | |
4796 | e:warn("SSL libary (LuaSec) not loaded, so TLS not available"); | |
4797 | elseif not e.secure then | |
4798 | e:debug("Server doesn't offer TLS :("); | |
4799 | end | |
4800 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4801 | local function o(t) |
12 | 4802 | if t.name=="proceed"then |
4803 | e:debug("Server says proceed, handshake starting..."); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4804 | e.conn:starttls(e.ssl or{mode="client",protocol="sslv23",options="no_sslv2",capath="/etc/ssl/certs"},true); |
12 | 4805 | end |
4806 | end | |
4807 | local function a(t) | |
4808 | if t=="ssl-handshake-complete"then | |
4809 | e.secure=true; | |
4810 | e:debug("Re-opening stream..."); | |
4811 | e:reopen(); | |
4812 | end | |
4813 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4814 | e:hook("stream-features",i,400); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4815 | e:hook("stream/"..t,o); |
12 | 4816 | e:hook("status",a,400); |
4817 | return true; | |
4818 | end | |
4819 | end) | |
4820 | package.preload['verse.plugins.sasl']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4821 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4822 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4823 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4824 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4825 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4826 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4827 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4828 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4829 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4830 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4831 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4832 | local i=require"verse"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4833 | local s,h=require"mime".b64,require"mime".unb64; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4834 | local a="urn:ietf:params:xml:ns:xmpp-sasl"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4835 | function i.plugins.sasl(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4836 | local function r(t) |
12 | 4837 | if e.authenticated then return;end |
4838 | e:debug("Authenticating with SASL..."); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4839 | local t=t:get_child("mechanisms",a); |
12 | 4840 | if not t then return end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4841 | local o={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4842 | local n={}; |
12 | 4843 | for t in t:childtags("mechanism")do |
4844 | t=t:get_text(); | |
4845 | e:debug("Server offers %s",t); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4846 | if not o[t]then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4847 | local i=t:match("[^-]+"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4848 | local s,a=pcall(require,"util.sasl."..i:lower()); |
12 | 4849 | if s then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4850 | e:debug("Loaded SASL %s module",i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4851 | o[t],n[t]=a(e,t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4852 | elseif not tostring(a):match("not found")then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4853 | e:debug("Loading failed: %s",tostring(a)); |
12 | 4854 | end |
4855 | end | |
4856 | end | |
4857 | local t={}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4858 | for e in pairs(o)do |
12 | 4859 | table.insert(t,e); |
4860 | end | |
4861 | if not t[1]then | |
4862 | e:event("authentication-failure",{condition="no-supported-sasl-mechanisms"}); | |
4863 | e:close(); | |
4864 | return; | |
4865 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4866 | table.sort(t,function(t,e)return n[t]>n[e];end); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4867 | local t,n=t[1]; |
12 | 4868 | e:debug("Selecting %s mechanism...",t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4869 | e.sasl_mechanism=coroutine.wrap(o[t]); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4870 | n=e:sasl_mechanism(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4871 | local t=i.stanza("auth",{xmlns=a,mechanism=t}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4872 | if n then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4873 | t:text(s(n)); |
12 | 4874 | end |
4875 | e:send(t); | |
4876 | return true; | |
4877 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4878 | local function o(t) |
12 | 4879 | if t.name=="failure"then |
4880 | local a=t.tags[1]; | |
4881 | local t=t:get_child_text("text"); | |
4882 | e:event("authentication-failure",{condition=a.name,text=t}); | |
4883 | e:close(); | |
4884 | return false; | |
4885 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4886 | local t,o=e.sasl_mechanism(t.name,h(t:get_text())); |
12 | 4887 | if not t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4888 | e:event("authentication-failure",{condition=o}); |
12 | 4889 | e:close(); |
4890 | return false; | |
4891 | elseif t==true then | |
4892 | e:event("authentication-success"); | |
4893 | e.authenticated=true | |
4894 | e:reopen(); | |
4895 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4896 | e:send(i.stanza("response",{xmlns=a}):text(s(t))); |
12 | 4897 | end |
4898 | return true; | |
4899 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4900 | e:hook("stream-features",r,300); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4901 | e:hook("stream/"..a,o); |
12 | 4902 | return true; |
4903 | end | |
4904 | end) | |
4905 | package.preload['verse.plugins.bind']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4906 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4907 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4908 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4909 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4910 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4911 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4912 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4913 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4914 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4915 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4916 | end |
12 | 4917 | local t=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4918 | local i=require"util.jid"; |
12 | 4919 | local a="urn:ietf:params:xml:ns:xmpp-bind"; |
4920 | function t.plugins.bind(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4921 | local function o(o) |
12 | 4922 | if e.bound then return;end |
4923 | e:debug("Binding resource..."); | |
4924 | e:send_iq(t.iq({type="set"}):tag("bind",{xmlns=a}):tag("resource"):text(e.resource), | |
4925 | function(t) | |
4926 | if t.attr.type=="result"then | |
4927 | local t=t | |
4928 | :get_child("bind",a) | |
4929 | :get_child_text("jid"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4930 | e.username,e.host,e.resource=i.split(t); |
12 | 4931 | e.jid,e.bound=t,true; |
4932 | e:event("bind-success",{jid=t}); | |
4933 | elseif t.attr.type=="error"then | |
4934 | local a=t:child_with_name("error"); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4935 | local o,a,t=t:get_error(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
4936 | e:event("bind-failure",{error=a,text=t,type=o}); |
12 | 4937 | end |
4938 | end); | |
4939 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4940 | e:hook("stream-features",o,200); |
12 | 4941 | return true; |
4942 | end | |
4943 | end) | |
4944 | package.preload['verse.plugins.session']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4945 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4946 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4947 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4948 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4949 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4950 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4951 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4952 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4953 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4954 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4955 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4956 | local a=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4957 | local o="urn:ietf:params:xml:ns:xmpp-session"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4958 | function a.plugins.session(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4959 | local function n(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4960 | local t=t:get_child("session",o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4961 | if t and not t:get_child("optional")then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4962 | local function i(t) |
12 | 4963 | e:debug("Establishing Session..."); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4964 | e:send_iq(a.iq({type="set"}):tag("session",{xmlns=o}), |
12 | 4965 | function(t) |
4966 | if t.attr.type=="result"then | |
4967 | e:event("session-success"); | |
4968 | elseif t.attr.type=="error"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4969 | local t,a,o=t:get_error(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4970 | e:event("session-failure",{error=a,text=o,type=t}); |
12 | 4971 | end |
4972 | end); | |
4973 | return true; | |
4974 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4975 | e:hook("bind-success",i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4976 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4977 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4978 | e:hook("stream-features",n); |
12 | 4979 | return true; |
4980 | end | |
4981 | end) | |
4982 | package.preload['verse.plugins.legacy']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4983 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4984 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4985 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4986 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4987 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4988 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4989 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4990 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4991 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4992 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4993 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4994 | local o=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4995 | local n=require"util.uuid".generate; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4996 | local i="jabber:iq:auth"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4997 | function o.plugins.legacy(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4998 | local function s(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
4999 | local a=t:get_child("query",i); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5000 | if t.attr.type~="result"or not a then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5001 | local o,a,t=t:get_error(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5002 | e:debug("warn","%s %s: %s",o,a,t); |
12 | 5003 | end |
5004 | local t={ | |
5005 | username=e.username; | |
5006 | password=e.password; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5007 | resource=e.resource or n(); |
12 | 5008 | digest=false,sequence=false,token=false; |
5009 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5010 | local o=o.iq({to=e.host,type="set"}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5011 | :tag("query",{xmlns=i}); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5012 | if#a>0 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5013 | for a in a:childtags()do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5014 | local a=a.name; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5015 | local i=t[a]; |
12 | 5016 | if i then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5017 | o:tag(a):text(t[a]):up(); |
12 | 5018 | elseif i==nil then |
5019 | local t="feature-not-implemented"; | |
5020 | e:event("authentication-failure",{condition=t}); | |
5021 | return false; | |
5022 | end | |
5023 | end | |
5024 | else | |
5025 | for t,e in pairs(t)do | |
5026 | if e then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5027 | o:tag(t):text(e):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5028 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5029 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5030 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5031 | e:send_iq(o,function(a) |
12 | 5032 | if a.attr.type=="result"then |
5033 | e.resource=t.resource; | |
5034 | e.jid=t.username.."@"..e.host.."/"..t.resource; | |
5035 | e:event("authentication-success"); | |
5036 | e:event("bind-success",e.jid); | |
5037 | else | |
5038 | local a,t,a=a:get_error(); | |
5039 | e:event("authentication-failure",{condition=t}); | |
5040 | end | |
5041 | end); | |
5042 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5043 | local function a(t) |
12 | 5044 | if not t.version then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5045 | e:send_iq(o.iq({type="get"}) |
12 | 5046 | :tag("query",{xmlns="jabber:iq:auth"}) |
5047 | :tag("username"):text(e.username), | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5048 | s); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5049 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5050 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5051 | e:hook("opened",a); |
12 | 5052 | end |
5053 | end) | |
5054 | package.preload['verse.plugins.compression']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5055 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5056 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5057 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5058 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5059 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5060 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5061 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5062 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5063 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5064 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5065 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5066 | local t=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5067 | local e=require"zlib"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5068 | local a="http://jabber.org/features/compress" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5069 | local a="http://jabber.org/protocol/compress" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5070 | local o="http://etherx.jabber.org/streams"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5071 | local n=9; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5072 | local function i(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5073 | local i,e=pcall(e.deflate,n); |
12 | 5074 | if i==false then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5075 | local t=t.stanza("failure",{xmlns=a}):tag("setup-failed"); |
12 | 5076 | o:send(t); |
5077 | o:error("Failed to create zlib.deflate filter: %s",tostring(e)); | |
5078 | return | |
5079 | end | |
5080 | return e | |
5081 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5082 | local function s(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5083 | local i,e=pcall(e.inflate); |
12 | 5084 | if i==false then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5085 | local t=t.stanza("failure",{xmlns=a}):tag("setup-failed"); |
12 | 5086 | o:send(t); |
5087 | o:error("Failed to create zlib.inflate filter: %s",tostring(e)); | |
5088 | return | |
5089 | end | |
5090 | return e | |
5091 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5092 | local function h(e,o) |
12 | 5093 | function e:send(i) |
5094 | local i,o,n=pcall(o,tostring(i),'sync'); | |
5095 | if i==false then | |
5096 | e:close({ | |
5097 | condition="undefined-condition"; | |
5098 | text=o; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5099 | extra=t.stanza("failure",{xmlns=a}):tag("processing-failed"); |
12 | 5100 | }); |
5101 | e:warn("Compressed send failed: %s",tostring(o)); | |
5102 | return; | |
5103 | end | |
5104 | e.conn:write(o); | |
5105 | end; | |
5106 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5107 | local function r(e,i) |
12 | 5108 | local s=e.data |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5109 | e.data=function(n,o) |
12 | 5110 | e:debug("Decompressing data..."); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5111 | local i,o,h=pcall(i,o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5112 | if i==false then |
12 | 5113 | e:close({ |
5114 | condition="undefined-condition"; | |
5115 | text=o; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5116 | extra=t.stanza("failure",{xmlns=a}):tag("processing-failed"); |
12 | 5117 | }); |
5118 | stream:warn("%s",tostring(o)); | |
5119 | return; | |
5120 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5121 | return s(n,o); |
12 | 5122 | end; |
5123 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5124 | function t.plugins.compression(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5125 | local function n(o) |
12 | 5126 | if not e.compressed then |
5127 | local o=o:child_with_name("compression"); | |
5128 | if o then | |
5129 | for o in o:children()do | |
5130 | local o=o[1] | |
5131 | if o=="zlib"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5132 | e:send(t.stanza("compress",{xmlns=a}):tag("method"):text("zlib")) |
12 | 5133 | e:debug("Enabled compression using zlib.") |
5134 | return true; | |
5135 | end | |
5136 | end | |
5137 | session:debug("Remote server supports no compression algorithm we support.") | |
5138 | end | |
5139 | end | |
5140 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5141 | local function o(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5142 | if a.name=="compressed"then |
12 | 5143 | e:debug("Activating compression...") |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5144 | local a=i(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5145 | if not a then return end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5146 | local t=s(e); |
12 | 5147 | if not t then return end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5148 | h(e,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5149 | r(e,t); |
12 | 5150 | e.compressed=true; |
5151 | e:reopen(); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5152 | elseif a.name=="failure"then |
12 | 5153 | e:warn("Failed to establish compression"); |
5154 | end | |
5155 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5156 | e:hook("stream-features",n,250); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5157 | e:hook("stream/"..a,o); |
12 | 5158 | end |
5159 | end) | |
5160 | package.preload['verse.plugins.smacks']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5161 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5162 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5163 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5164 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5165 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5166 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5167 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5168 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5169 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5170 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5171 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5172 | local i=require"verse"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5173 | local h=require"socket".gettime; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5174 | local s="urn:xmpp:sm:3"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5175 | function i.plugins.smacks(e) |
12 | 5176 | local t={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5177 | local a=0; |
12 | 5178 | local r=h(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5179 | local o; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5180 | local n=0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5181 | local function d(t) |
12 | 5182 | if t.attr.xmlns=="jabber:client"or not t.attr.xmlns then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5183 | n=n+1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5184 | e:debug("Increasing handled stanzas to %d for %s",n,t:top_tag()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5185 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5186 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5187 | local function l(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5188 | if a.name and not a.attr.xmlns then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5189 | t[#t+1]=tostring(a); |
12 | 5190 | r=h(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5191 | if not o then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5192 | o=true; |
12 | 5193 | e:debug("Waiting to send ack request..."); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5194 | i.add_task(1,function() |
12 | 5195 | if#t==0 then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5196 | o=false; |
12 | 5197 | return; |
5198 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5199 | local a=h()-r; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5200 | if a<1 and#t<10 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5201 | return 1-a; |
12 | 5202 | end |
5203 | e:debug("Time up, sending <r>..."); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5204 | o=false; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5205 | e:send(i.stanza("r",{xmlns=s})); |
12 | 5206 | end); |
5207 | end | |
5208 | end | |
5209 | end | |
5210 | local function h() | |
5211 | e:debug("smacks: connection lost"); | |
5212 | e.stream_management_supported=nil; | |
5213 | if e.resumption_token then | |
5214 | e:debug("smacks: have resumption token, reconnecting in 1s..."); | |
5215 | e.authenticated=nil; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5216 | i.add_task(1,function() |
12 | 5217 | e:connect(e.connect_host or e.host,e.connect_port or 5222); |
5218 | end); | |
5219 | return true; | |
5220 | end | |
5221 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5222 | local function u() |
12 | 5223 | e.resumption_token=nil; |
5224 | e:unhook("disconnected",h); | |
5225 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5226 | local function r(o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5227 | if o.name=="r"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5228 | e:debug("Ack requested... acking %d handled stanzas",n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5229 | e:send(i.stanza("a",{xmlns=s,h=tostring(n)})); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5230 | elseif o.name=="a"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5231 | local o=tonumber(o.attr.h); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5232 | if o>a then |
12 | 5233 | local i=#t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5234 | for a=a+1,o do |
12 | 5235 | table.remove(t,1); |
5236 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5237 | e:debug("Received ack: New ack: "..o.." Last ack: "..a.." Unacked stanzas now: "..#t.." (was "..i..")"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5238 | a=o; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5239 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5240 | e:warn("Received bad ack for "..o.." when last ack was "..a); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5241 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5242 | elseif o.name=="enabled"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5243 | if o.attr.id then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5244 | e.resumption_token=o.attr.id; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5245 | e:hook("closed",u,100); |
12 | 5246 | e:hook("disconnected",h,100); |
5247 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5248 | elseif o.name=="resumed"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5249 | local o=tonumber(o.attr.h); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5250 | if o>a then |
12 | 5251 | local i=#t; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5252 | for a=a+1,o do |
12 | 5253 | table.remove(t,1); |
5254 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5255 | e:debug("Received ack: New ack: "..o.." Last ack: "..a.." Unacked stanzas now: "..#t.." (was "..i..")"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5256 | a=o; |
12 | 5257 | end |
5258 | for a=1,#t do | |
5259 | e:send(t[a]); | |
5260 | end | |
5261 | t={}; | |
5262 | e:debug("Resumed successfully"); | |
5263 | e:event("resumed"); | |
5264 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5265 | e:warn("Don't know how to handle "..s.."/"..o.name); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5266 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5267 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5268 | local function t() |
12 | 5269 | if not e.smacks then |
5270 | e:debug("smacks: sending enable"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5271 | e:send(i.stanza("enable",{xmlns=s,resume="true"})); |
12 | 5272 | e.smacks=true; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5273 | e:hook("stanza",d); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5274 | e:hook("outgoing",l); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5275 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5276 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5277 | local function a(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5278 | if a:get_child("sm",s)then |
12 | 5279 | e.stream_management_supported=true; |
5280 | if e.smacks and e.bound then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5281 | e:debug("Resuming stream with %d handled stanzas",n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5282 | e:send(i.stanza("resume",{xmlns=s, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5283 | h=n,previd=e.resumption_token})); |
12 | 5284 | return true; |
5285 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5286 | e:hook("bind-success",t,1); |
12 | 5287 | end |
5288 | end | |
5289 | end | |
5290 | e:hook("stream-features",a,250); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5291 | e:hook("stream/"..s,r); |
12 | 5292 | end |
5293 | end) | |
5294 | package.preload['verse.plugins.keepalive']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5295 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5296 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5297 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5298 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5299 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5300 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5301 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5302 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5303 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5304 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5305 | end |
12 | 5306 | local t=require"verse"; |
5307 | function t.plugins.keepalive(e) | |
5308 | e.keepalive_timeout=e.keepalive_timeout or 300; | |
5309 | t.add_task(e.keepalive_timeout,function() | |
5310 | e.conn:write(" "); | |
5311 | return e.keepalive_timeout; | |
5312 | end); | |
5313 | end | |
5314 | end) | |
5315 | package.preload['verse.plugins.disco']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5316 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5317 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5318 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5319 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5320 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5321 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5322 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5323 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5324 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5325 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5326 | end |
12 | 5327 | local a=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5328 | local e=require("mime").b64; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5329 | local e=require("util.hashes").sha1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5330 | local r=require"util.caps".calculate_hash; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5331 | local s="http://jabber.org/protocol/caps"; |
12 | 5332 | local e="http://jabber.org/protocol/disco"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5333 | local i=e.."#info"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5334 | local o=e.."#items"; |
12 | 5335 | function a.plugins.disco(e) |
5336 | e:add_plugin("presence"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5337 | local n={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5338 | __index=function(t,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5339 | local a={identities={},features={}}; |
12 | 5340 | if e=="identities"or e=="features"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5341 | return t[false][e] |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5342 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5343 | t[e]=a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5344 | return a; |
12 | 5345 | end, |
5346 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5347 | local t={ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5348 | __index=function(a,t) |
12 | 5349 | local e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5350 | a[t]=e; |
12 | 5351 | return e; |
5352 | end, | |
5353 | }; | |
5354 | e.disco={ | |
5355 | cache={}, | |
5356 | info=setmetatable({ | |
5357 | [false]={ | |
5358 | identities={ | |
5359 | {category='client',type='pc',name='Verse'}, | |
5360 | }, | |
5361 | features={ | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5362 | [s]=true, |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5363 | [i]=true, |
12 | 5364 | [o]=true, |
5365 | }, | |
5366 | }, | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5367 | },n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5368 | items=setmetatable({[false]={}},t); |
12 | 5369 | }; |
5370 | e.caps={} | |
5371 | e.caps.node='http://code.matthewwild.co.uk/verse/' | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5372 | local function h(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5373 | local o=e.disco.info[t or false]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5374 | if t and t==e.caps.node.."#"..e.caps.hash then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5375 | o=e.disco.info[false]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5376 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5377 | local n,o=o.identities,o.features |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5378 | local e=a.stanza("query",{ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5379 | xmlns=i, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5380 | node=t, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5381 | }); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5382 | for a,t in pairs(n)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5383 | e:tag('identity',t):up() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5384 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5385 | for t in pairs(o)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5386 | e:tag('feature',{var=t}):up() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5387 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5388 | return e; |
12 | 5389 | end |
5390 | setmetatable(e.caps,{ | |
5391 | __call=function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5392 | local t=r(h()) |
12 | 5393 | e.caps.hash=t; |
5394 | return a.stanza('c',{ | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5395 | xmlns=s, |
12 | 5396 | hash='sha-1', |
5397 | node=e.caps.node, | |
5398 | ver=t | |
5399 | }) | |
5400 | end | |
5401 | }) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5402 | function e:set_identity(a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5403 | self.disco.info[t or false].identities={a}; |
12 | 5404 | e:resend_presence(); |
5405 | end | |
5406 | function e:add_identity(a,t) | |
5407 | local t=self.disco.info[t or false].identities; | |
5408 | t[#t+1]=a; | |
5409 | e:resend_presence(); | |
5410 | end | |
5411 | function e:add_disco_feature(t,a) | |
5412 | local t=t.var or t; | |
5413 | self.disco.info[a or false].features[t]=true; | |
5414 | e:resend_presence(); | |
5415 | end | |
5416 | function e:remove_disco_feature(t,a) | |
5417 | local t=t.var or t; | |
5418 | self.disco.info[a or false].features[t]=nil; | |
5419 | e:resend_presence(); | |
5420 | end | |
5421 | function e:add_disco_item(t,e) | |
5422 | local e=self.disco.items[e or false]; | |
5423 | e[#e+1]=t; | |
5424 | end | |
5425 | function e:remove_disco_item(a,e) | |
5426 | local e=self.disco.items[e or false]; | |
5427 | for t=#e,1,-1 do | |
5428 | if e[t]==a then | |
5429 | table.remove(e,t); | |
5430 | end | |
5431 | end | |
5432 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5433 | function e:jid_has_identity(t,a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5434 | local o=self.disco.cache[t]; |
12 | 5435 | if not o then |
5436 | return nil,"no-cache"; | |
5437 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5438 | local t=self.disco.cache[t].identities; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5439 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5440 | return t[a.."/"..e]or false; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5441 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5442 | for e in pairs(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5443 | if e:match("^(.*)/")==a then |
12 | 5444 | return true; |
5445 | end | |
5446 | end | |
5447 | end | |
5448 | function e:jid_supports(e,t) | |
5449 | local e=self.disco.cache[e]; | |
5450 | if not e or not e.features then | |
5451 | return nil,"no-cache"; | |
5452 | end | |
5453 | return e.features[t]or false; | |
5454 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5455 | function e:get_local_services(a,o) |
12 | 5456 | local e=self.disco.cache[self.host]; |
5457 | if not(e)or not(e.items)then | |
5458 | return nil,"no-cache"; | |
5459 | end | |
5460 | local t={}; | |
5461 | for i,e in ipairs(e.items)do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5462 | if self:jid_has_identity(e.jid,a,o)then |
12 | 5463 | table.insert(t,e.jid); |
5464 | end | |
5465 | end | |
5466 | return t; | |
5467 | end | |
5468 | function e:disco_local_services(a) | |
5469 | self:disco_items(self.host,nil,function(t) | |
5470 | if not t then | |
5471 | return a({}); | |
5472 | end | |
5473 | local e=0; | |
5474 | local function o() | |
5475 | e=e-1; | |
5476 | if e==0 then | |
5477 | return a(t); | |
5478 | end | |
5479 | end | |
5480 | for a,t in ipairs(t)do | |
5481 | if t.jid then | |
5482 | e=e+1; | |
5483 | self:disco_info(t.jid,nil,o); | |
5484 | end | |
5485 | end | |
5486 | if e==0 then | |
5487 | return a(t); | |
5488 | end | |
5489 | end); | |
5490 | end | |
5491 | function e:disco_info(e,t,s) | |
5492 | local a=a.iq({to=e,type="get"}) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5493 | :tag("query",{xmlns=i,node=t}); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5494 | self:send_iq(a,function(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5495 | if o.attr.type=="error"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5496 | return s(nil,o:get_error()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5497 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5498 | local n,a={},{}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5499 | for e in o:get_child("query",i):childtags()do |
12 | 5500 | if e.name=="identity"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5501 | n[e.attr.category.."/"..e.attr.type]=e.attr.name or true; |
12 | 5502 | elseif e.name=="feature"then |
5503 | a[e.attr.var]=true; | |
5504 | end | |
5505 | end | |
5506 | if not self.disco.cache[e]then | |
5507 | self.disco.cache[e]={nodes={}}; | |
5508 | end | |
5509 | if t then | |
5510 | if not self.disco.cache[e].nodes[t]then | |
5511 | self.disco.cache[e].nodes[t]={nodes={}}; | |
5512 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5513 | self.disco.cache[e].nodes[t].identities=n; |
12 | 5514 | self.disco.cache[e].nodes[t].features=a; |
5515 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5516 | self.disco.cache[e].identities=n; |
12 | 5517 | self.disco.cache[e].features=a; |
5518 | end | |
5519 | return s(self.disco.cache[e]); | |
5520 | end); | |
5521 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5522 | function e:disco_items(t,i,n) |
12 | 5523 | local a=a.iq({to=t,type="get"}) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5524 | :tag("query",{xmlns=o,node=i}); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5525 | self:send_iq(a,function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5526 | if e.attr.type=="error"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5527 | return n(nil,e:get_error()); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5528 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5529 | local a={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5530 | for e in e:get_child("query",o):childtags()do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5531 | if e.name=="item"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5532 | table.insert(a,{ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5533 | name=e.attr.name; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5534 | jid=e.attr.jid; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5535 | node=e.attr.node; |
12 | 5536 | }); |
5537 | end | |
5538 | end | |
5539 | if not self.disco.cache[t]then | |
5540 | self.disco.cache[t]={nodes={}}; | |
5541 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5542 | if i then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5543 | if not self.disco.cache[t].nodes[i]then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5544 | self.disco.cache[t].nodes[i]={nodes={}}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5545 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5546 | self.disco.cache[t].nodes[i].items=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5547 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5548 | self.disco.cache[t].items=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5549 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5550 | return n(a); |
12 | 5551 | end); |
5552 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5553 | e:hook("iq/"..i,function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5554 | local o=t.tags[1]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5555 | if t.attr.type=='get'and o.name=="query"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5556 | local o=h(o.attr.node); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5557 | local t=a.reply(t):add_child(o); |
12 | 5558 | e:send(t); |
5559 | return true | |
5560 | end | |
5561 | end); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5562 | e:hook("iq/"..o,function(i) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5563 | local t=i.tags[1]; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5564 | if i.attr.type=='get'and t.name=="query"then |
12 | 5565 | local n=e.disco.items[t.attr.node or false]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5566 | local t=a.reply(i):tag('query',{ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5567 | xmlns=o, |
12 | 5568 | node=t.attr.node |
5569 | }) | |
5570 | for a=1,#n do | |
5571 | t:tag('item',n[a]):up() | |
5572 | end | |
5573 | e:send(t); | |
5574 | return true | |
5575 | end | |
5576 | end); | |
5577 | local t; | |
5578 | e:hook("ready",function() | |
5579 | if t then return;end | |
5580 | t=true; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5581 | local function i(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5582 | local a=e.disco.cache[t]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5583 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5584 | for a in pairs(a.identities)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5585 | local o,a=a:match("^(.*)/(.*)$"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5586 | print(t,o,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5587 | e:event("disco/service-discovered/"..o,{ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5588 | type=a,jid=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5589 | }); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5590 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5591 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5592 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5593 | e:disco_info(e.host,nil,function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5594 | i(e.host); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5595 | end); |
12 | 5596 | e:disco_local_services(function(t) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5597 | for a,t in ipairs(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5598 | i(t.jid); |
12 | 5599 | end |
5600 | e:event("ready"); | |
5601 | end); | |
5602 | return true; | |
5603 | end,50); | |
5604 | e:hook("presence-out",function(t) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5605 | if not t:get_child("c",s)then |
12 | 5606 | t:reset():add_child(e:caps()):reset(); |
5607 | end | |
5608 | end,10); | |
5609 | end | |
5610 | end) | |
5611 | package.preload['verse.plugins.version']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5612 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5613 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5614 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5615 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5616 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5617 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5618 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5619 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5620 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5621 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5622 | end |
12 | 5623 | local o=require"verse"; |
5624 | local a="jabber:iq:version"; | |
5625 | local function i(e,t) | |
5626 | e.name=t.name; | |
5627 | e.version=t.version; | |
5628 | e.platform=t.platform; | |
5629 | end | |
5630 | function o.plugins.version(e) | |
5631 | e.version={set=i}; | |
5632 | e:hook("iq/"..a,function(t) | |
5633 | if t.attr.type~="get"then return;end | |
5634 | local t=o.reply(t) | |
5635 | :tag("query",{xmlns=a}); | |
5636 | if e.version.name then | |
5637 | t:tag("name"):text(tostring(e.version.name)):up(); | |
5638 | end | |
5639 | if e.version.version then | |
5640 | t:tag("version"):text(tostring(e.version.version)):up() | |
5641 | end | |
5642 | if e.version.platform then | |
5643 | t:tag("os"):text(e.version.platform); | |
5644 | end | |
5645 | e:send(t); | |
5646 | return true; | |
5647 | end); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5648 | function e:query_version(e,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5649 | t=t or function(e)return self:event("version/response",e);end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5650 | self:send_iq(o.iq({type="get",to=e}) |
12 | 5651 | :tag("query",{xmlns=a}), |
5652 | function(o) | |
5653 | if o.attr.type=="result"then | |
5654 | local e=o:get_child("query",a); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5655 | local a=e and e:get_child_text("name"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5656 | local o=e and e:get_child_text("version"); |
12 | 5657 | local e=e and e:get_child_text("os"); |
5658 | t({ | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5659 | name=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5660 | version=o; |
12 | 5661 | platform=e; |
5662 | }); | |
5663 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5664 | local a,e,o=o:get_error(); |
12 | 5665 | t({ |
5666 | error=true; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5667 | condition=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5668 | text=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5669 | type=a; |
12 | 5670 | }); |
5671 | end | |
5672 | end); | |
5673 | end | |
5674 | return true; | |
5675 | end | |
5676 | end) | |
5677 | package.preload['verse.plugins.ping']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5678 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5679 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5680 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5681 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5682 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5683 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5684 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5685 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5686 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5687 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5688 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5689 | local a=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5690 | local n=require"socket".gettime; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5691 | local i="urn:xmpp:ping"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5692 | function a.plugins.ping(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5693 | function e:ping(t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5694 | local s=n(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5695 | e:send_iq(a.iq{to=t,type="get"}:tag("ping",{xmlns=i}), |
12 | 5696 | function(e) |
5697 | if e.attr.type=="error"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5698 | local i,e,a=e:get_error(); |
12 | 5699 | if e~="service-unavailable"and e~="feature-not-implemented"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5700 | o(nil,t,{type=i,condition=e,text=a}); |
12 | 5701 | return; |
5702 | end | |
5703 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5704 | o(n()-s,t); |
12 | 5705 | end); |
5706 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5707 | e:hook("iq/"..i,function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5708 | return e:send(a.reply(t)); |
12 | 5709 | end); |
5710 | return true; | |
5711 | end | |
5712 | end) | |
5713 | package.preload['verse.plugins.uptime']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5714 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5715 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5716 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5717 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5718 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5719 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5720 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5721 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5722 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5723 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5724 | end |
12 | 5725 | local o=require"verse"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5726 | local t="jabber:iq:last"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5727 | local function a(e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5728 | e.starttime=t.starttime; |
12 | 5729 | end |
5730 | function o.plugins.uptime(e) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5731 | e.uptime={set=a}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5732 | e:hook("iq/"..t,function(a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5733 | if a.attr.type~="get"then return;end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5734 | local t=o.reply(a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5735 | :tag("query",{seconds=tostring(os.difftime(os.time(),e.uptime.starttime)),xmlns=t}); |
12 | 5736 | e:send(t); |
5737 | return true; | |
5738 | end); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5739 | function e:query_uptime(i,a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5740 | a=a or function(t)return e:event("uptime/response",t);end |
12 | 5741 | e:send_iq(o.iq({type="get",to=i}) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5742 | :tag("query",{xmlns=t}), |
12 | 5743 | function(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5744 | local t=e:get_child("query",t); |
12 | 5745 | if e.attr.type=="result"then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5746 | local e=tonumber(t.attr.seconds); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5747 | a({ |
12 | 5748 | seconds=e or nil; |
5749 | }); | |
5750 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5751 | local o,t,e=e:get_error(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5752 | a({ |
12 | 5753 | error=true; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5754 | condition=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5755 | text=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5756 | type=o; |
12 | 5757 | }); |
5758 | end | |
5759 | end); | |
5760 | end | |
5761 | return true; | |
5762 | end | |
5763 | end) | |
5764 | package.preload['verse.plugins.blocking']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5765 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5766 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5767 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5768 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5769 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5770 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5771 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5772 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5773 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5774 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5775 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5776 | local o=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5777 | local a="urn:xmpp:blocking"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5778 | function o.plugins.blocking(e) |
12 | 5779 | e.blocking={}; |
5780 | function e.blocking:block_jid(i,t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5781 | e:send_iq(o.iq{type="set"} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5782 | :tag("block",{xmlns=a}) |
12 | 5783 | :tag("item",{jid=i}) |
5784 | ,function()return t and t(true);end | |
5785 | ,function()return t and t(false);end | |
5786 | ); | |
5787 | end | |
5788 | function e.blocking:unblock_jid(i,t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5789 | e:send_iq(o.iq{type="set"} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5790 | :tag("unblock",{xmlns=a}) |
12 | 5791 | :tag("item",{jid=i}) |
5792 | ,function()return t and t(true);end | |
5793 | ,function()return t and t(false);end | |
5794 | ); | |
5795 | end | |
5796 | function e.blocking:unblock_all_jids(t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5797 | e:send_iq(o.iq{type="set"} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5798 | :tag("unblock",{xmlns=a}) |
12 | 5799 | ,function()return t and t(true);end |
5800 | ,function()return t and t(false);end | |
5801 | ); | |
5802 | end | |
5803 | function e.blocking:get_blocked_jids(t) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5804 | e:send_iq(o.iq{type="get"} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5805 | :tag("blocklist",{xmlns=a}) |
12 | 5806 | ,function(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5807 | local a=e:get_child("blocklist",a); |
12 | 5808 | if not a then return t and t(false);end |
5809 | local e={}; | |
5810 | for t in a:childtags()do | |
5811 | e[#e+1]=t.attr.jid; | |
5812 | end | |
5813 | return t and t(e); | |
5814 | end | |
5815 | ,function(e)return t and t(false);end | |
5816 | ); | |
5817 | end | |
5818 | end | |
5819 | end) | |
5820 | package.preload['verse.plugins.jingle']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5821 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5822 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5823 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5824 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5825 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5826 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5827 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5828 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5829 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5830 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5831 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5832 | local o=require"verse"; |
12 | 5833 | local e=require"util.timer"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5834 | local n=require"util.uuid".generate; |
12 | 5835 | local i="urn:xmpp:jingle:1"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5836 | local r="urn:xmpp:jingle:errors:1"; |
12 | 5837 | local t={}; |
5838 | t.__index=t; | |
5839 | local e={}; | |
5840 | local e={}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5841 | function o.plugins.jingle(e) |
12 | 5842 | e:hook("ready",function() |
5843 | e:add_disco_feature(i); | |
5844 | end,10); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5845 | function e:jingle(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5846 | return o.eventable(setmetatable(base or{ |
12 | 5847 | role="initiator"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5848 | peer=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5849 | sid=n(); |
12 | 5850 | stream=e; |
5851 | },t)); | |
5852 | end | |
5853 | function e:register_jingle_transport(e) | |
5854 | end | |
5855 | function e:register_jingle_content_type(e) | |
5856 | end | |
5857 | local function u(n) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5858 | local s=n:get_child("jingle",i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5859 | local a=s.attr.sid; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5860 | local h=s.attr.action; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5861 | local a=e:event("jingle/"..a,n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5862 | if a==true then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5863 | e:send(o.reply(n)); |
12 | 5864 | return true; |
5865 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5866 | if h~="session-initiate"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5867 | local t=o.error_reply(n,"cancel","item-not-found") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5868 | :tag("unknown-session",{xmlns=r}):up(); |
12 | 5869 | e:send(t); |
5870 | return; | |
5871 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5872 | local l=s.attr.sid; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5873 | local a=o.eventable{ |
12 | 5874 | role="receiver"; |
5875 | peer=n.attr.from; | |
5876 | sid=l; | |
5877 | stream=e; | |
5878 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5879 | setmetatable(a,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5880 | local h; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5881 | local d,r; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5882 | for t in s:childtags()do |
12 | 5883 | if t.name=="content"and t.attr.xmlns==i then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5884 | local o=t:child_with_name("description"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5885 | local i=o.attr.xmlns; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5886 | if i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5887 | local e=e:event("jingle/content/"..i,a,o); |
12 | 5888 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5889 | d=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5890 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5891 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5892 | local o=t:child_with_name("transport"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5893 | local i=o.attr.xmlns; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5894 | r=e:event("jingle/transport/"..i,a,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5895 | if d and r then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5896 | h=t; |
12 | 5897 | break; |
5898 | end | |
5899 | end | |
5900 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5901 | if not d then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5902 | e:send(o.error_reply(n,"cancel","feature-not-implemented","The specified content is not supported")); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5903 | return true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5904 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5905 | if not r then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5906 | e:send(o.error_reply(n,"cancel","feature-not-implemented","The specified transport is not supported")); |
12 | 5907 | return true; |
5908 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5909 | e:send(o.reply(n)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5910 | a.content_tag=h; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5911 | a.creator,a.name=h.attr.creator,h.attr.name; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5912 | a.content,a.transport=d,r; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5913 | function a:decline() |
12 | 5914 | end |
5915 | e:hook("jingle/"..l,function(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5916 | if e.attr.from~=a.peer then |
12 | 5917 | return false; |
5918 | end | |
5919 | local e=e:get_child("jingle",i); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5920 | return a:handle_command(e); |
12 | 5921 | end); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5922 | e:event("jingle",a); |
12 | 5923 | return true; |
5924 | end | |
5925 | function t:handle_command(a) | |
5926 | local t=a.attr.action; | |
5927 | e:debug("Handling Jingle command: %s",t); | |
5928 | if t=="session-terminate"then | |
5929 | self:destroy(); | |
5930 | elseif t=="session-accept"then | |
5931 | self:handle_accepted(a); | |
5932 | elseif t=="transport-info"then | |
5933 | e:debug("Handling transport-info"); | |
5934 | self.transport:info_received(a); | |
5935 | elseif t=="transport-replace"then | |
5936 | e:error("Peer wanted to swap transport, not implemented"); | |
5937 | else | |
5938 | e:warn("Unhandled Jingle command: %s",t); | |
5939 | return nil; | |
5940 | end | |
5941 | return true; | |
5942 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5943 | function t:send_command(a,t,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5944 | local t=o.iq({to=self.peer,type="set"}) |
12 | 5945 | :tag("jingle",{ |
5946 | xmlns=i, | |
5947 | sid=self.sid, | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5948 | action=a, |
12 | 5949 | initiator=self.role=="initiator"and self.stream.jid or nil, |
5950 | responder=self.role=="responder"and self.jid or nil, | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5951 | }):add_child(t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5952 | if not e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5953 | self.stream:send(t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5954 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5955 | self.stream:send_iq(t,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5956 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5957 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5958 | function t:accept(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5959 | local t=o.iq({to=self.peer,type="set"}) |
12 | 5960 | :tag("jingle",{ |
5961 | xmlns=i, | |
5962 | sid=self.sid, | |
5963 | action="session-accept", | |
5964 | responder=e.jid, | |
5965 | }) | |
5966 | :tag("content",{creator=self.creator,name=self.name}); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5967 | local o=self.content:generate_accept(self.content_tag:child_with_name("description"),a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5968 | t:add_child(o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5969 | local a=self.transport:generate_accept(self.content_tag:child_with_name("transport"),a); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5970 | t:add_child(a); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5971 | local a=self; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5972 | e:send_iq(t,function(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5973 | if t.attr.type=="error"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5974 | local a,t,a=t:get_error(); |
12 | 5975 | e:error("session-accept rejected: %s",t); |
5976 | return false; | |
5977 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5978 | a.transport:connect(function(t) |
12 | 5979 | e:warn("CONNECTED (receiver)!!!"); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5980 | a.state="active"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
5981 | a:event("connected",t); |
12 | 5982 | end); |
5983 | end); | |
5984 | end | |
5985 | e:hook("iq/"..i,u); | |
5986 | return true; | |
5987 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5988 | function t:offer(t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5989 | local e=o.iq({to=self.peer,type="set"}) |
12 | 5990 | :tag("jingle",{xmlns=i,action="session-initiate", |
5991 | initiator=self.stream.jid,sid=self.sid}); | |
5992 | e:tag("content",{creator=self.role,name=t}); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
5993 | local t=self.stream:event("jingle/describe/"..t,a); |
12 | 5994 | if not t then |
5995 | return false,"Unknown content type"; | |
5996 | end | |
5997 | e:add_child(t); | |
5998 | local t=self.stream:event("jingle/transport/".."urn:xmpp:jingle:transports:s5b:1",self); | |
5999 | self.transport=t; | |
6000 | e:add_child(t:generate_initiate()); | |
6001 | self.stream:debug("Hooking %s","jingle/"..self.sid); | |
6002 | self.stream:hook("jingle/"..self.sid,function(e) | |
6003 | if e.attr.from~=self.peer then | |
6004 | return false; | |
6005 | end | |
6006 | local e=e:get_child("jingle",i); | |
6007 | return self:handle_command(e) | |
6008 | end); | |
6009 | self.stream:send_iq(e,function(e) | |
6010 | if e.attr.type=="error"then | |
6011 | self.state="terminated"; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6012 | local e,t,a=e:get_error(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6013 | return self:event("error",{type=e,condition=t,text=a}); |
12 | 6014 | end |
6015 | end); | |
6016 | self.state="pending"; | |
6017 | end | |
6018 | function t:terminate(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6019 | local e=o.stanza("reason"):tag(e or"success"); |
12 | 6020 | self:send_command("session-terminate",e,function(e) |
6021 | self.state="terminated"; | |
6022 | self.transport:disconnect(); | |
6023 | self:destroy(); | |
6024 | end); | |
6025 | end | |
6026 | function t:destroy() | |
6027 | self:event("terminated"); | |
6028 | self.stream:unhook("jingle/"..self.sid,self.handle_command); | |
6029 | end | |
6030 | function t:handle_accepted(e) | |
6031 | local e=e:child_with_name("transport"); | |
6032 | self.transport:handle_accepted(e); | |
6033 | self.transport:connect(function(e) | |
6034 | self.stream:debug("CONNECTED (initiator)!") | |
6035 | self.state="active"; | |
6036 | self:event("connected",e); | |
6037 | end); | |
6038 | end | |
6039 | function t:set_source(a,o) | |
6040 | local function t() | |
6041 | local e,i=a(); | |
6042 | if e and e~=""then | |
6043 | self.transport.conn:send(e); | |
6044 | elseif e==""then | |
6045 | return t(); | |
6046 | elseif e==nil then | |
6047 | if o then | |
6048 | self:terminate(); | |
6049 | end | |
6050 | self.transport.conn:unhook("drained",t); | |
6051 | a=nil; | |
6052 | end | |
6053 | end | |
6054 | self.transport.conn:hook("drained",t); | |
6055 | t(); | |
6056 | end | |
6057 | function t:set_sink(t) | |
6058 | self.transport.conn:hook("incoming-raw",t); | |
6059 | self.transport.conn:hook("disconnected",function(e) | |
6060 | self.stream:debug("Closing sink..."); | |
6061 | local e=e.reason; | |
6062 | if e=="closed"then e=nil;end | |
6063 | t(nil,e); | |
6064 | end); | |
6065 | end | |
6066 | end) | |
6067 | package.preload['verse.plugins.jingle_ft']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6068 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6069 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6070 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6071 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6072 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6073 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6074 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6075 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6076 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6077 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6078 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6079 | local i=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6080 | local o=require"ltn12"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6081 | local s=package.config:sub(1,1); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6082 | local a="urn:xmpp:jingle:apps:file-transfer:4"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6083 | function i.plugins.jingle_ft(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6084 | t:hook("ready",function() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6085 | t:add_disco_feature(a); |
12 | 6086 | end,10); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6087 | local n={type="file"}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6088 | function n:generate_accept(t,e) |
12 | 6089 | if e and e.save_file then |
6090 | self.jingle:hook("connected",function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6091 | local e=o.sink.file(io.open(e.save_file,"w+")); |
12 | 6092 | self.jingle:set_sink(e); |
6093 | end); | |
6094 | end | |
6095 | return t; | |
6096 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6097 | local n={__index=n}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6098 | t:hook("jingle/content/"..a,function(t,e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6099 | local e=e:get_child("file"); |
12 | 6100 | local e={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6101 | name=e:get_child_text("name"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6102 | size=tonumber(e:get_child_text("size")); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6103 | desc=e:get_child_text("desc"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6104 | date=e:get_child_text("date"); |
12 | 6105 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6106 | return setmetatable({jingle=t,file=e},n); |
12 | 6107 | end); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6108 | t:hook("jingle/describe/file",function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6109 | local t; |
12 | 6110 | if e.timestamp then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6111 | t=os.date("!%Y-%m-%dT%H:%M:%SZ",e.timestamp); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6112 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6113 | return i.stanza("description",{xmlns=a}) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6114 | :tag("file") |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6115 | :tag("name"):text(e.filename):up() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6116 | :tag("size"):text(tostring(e.size)):up() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6117 | :tag("date"):text(t):up() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6118 | :tag("desc"):text(e.description):up() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6119 | :up(); |
12 | 6120 | end); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6121 | function t:send_file(i,t) |
12 | 6122 | local e,a=io.open(t); |
6123 | if not e then return e,a;end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6124 | local a=e:seek("end",0); |
12 | 6125 | e:seek("set",0); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6126 | local o=o.source.file(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6127 | local e=self:jingle(i); |
12 | 6128 | e:offer("file",{ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6129 | filename=t:match("[^"..s.."]+$"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6130 | size=a; |
12 | 6131 | }); |
6132 | e:hook("connected",function() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6133 | e:set_source(o,true); |
12 | 6134 | end); |
6135 | return e; | |
6136 | end | |
6137 | end | |
6138 | end) | |
6139 | package.preload['verse.plugins.jingle_s5b']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6140 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6141 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6142 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6143 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6144 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6145 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6146 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6147 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6148 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6149 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6150 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6151 | local t=require"verse"; |
12 | 6152 | local o="urn:xmpp:jingle:transports:s5b:1"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6153 | local r="http://jabber.org/protocol/bytestreams"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6154 | local h=require"util.hashes".sha1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6155 | local s=require"util.uuid".generate; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6156 | local function d(e,t) |
12 | 6157 | local function a() |
6158 | e:unhook("connected",a); | |
6159 | return true; | |
6160 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6161 | local function i(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6162 | e:unhook("incoming-raw",i); |
12 | 6163 | if t:sub(1,2)~="\005\000"then |
6164 | return e:event("error","connection-failure"); | |
6165 | end | |
6166 | e:event("connected"); | |
6167 | return true; | |
6168 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6169 | local function o(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6170 | e:unhook("incoming-raw",o); |
12 | 6171 | if a~="\005\000"then |
6172 | local t="version-mismatch"; | |
6173 | if a:sub(1,1)=="\005"then | |
6174 | t="authentication-failure"; | |
6175 | end | |
6176 | return e:event("error",t); | |
6177 | end | |
6178 | e:send(string.char(5,1,0,3,#t)..t.."\0\0"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6179 | e:hook("incoming-raw",i,100); |
12 | 6180 | return true; |
6181 | end | |
6182 | e:hook("connected",a,200); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6183 | e:hook("incoming-raw",o,100); |
12 | 6184 | e:send("\005\001\000"); |
6185 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6186 | local function n(a,e,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6187 | local e=t.new(nil,{ |
12 | 6188 | streamhosts=e, |
6189 | current_host=0; | |
6190 | }); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6191 | local function t(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6192 | if o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6193 | return a(nil,o.reason); |
12 | 6194 | end |
6195 | if e.current_host<#e.streamhosts then | |
6196 | e.current_host=e.current_host+1; | |
6197 | e:debug("Attempting to connect to "..e.streamhosts[e.current_host].host..":"..e.streamhosts[e.current_host].port.."..."); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6198 | local t,a=e:connect( |
12 | 6199 | e.streamhosts[e.current_host].host, |
6200 | e.streamhosts[e.current_host].port | |
6201 | ); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6202 | if not t then |
12 | 6203 | e:debug("Error connecting to proxy (%s:%s): %s", |
6204 | e.streamhosts[e.current_host].host, | |
6205 | e.streamhosts[e.current_host].port, | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6206 | a |
12 | 6207 | ); |
6208 | else | |
6209 | e:debug("Connecting..."); | |
6210 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6211 | d(e,i); |
12 | 6212 | return true; |
6213 | end | |
6214 | e:unhook("disconnected",t); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6215 | return a(nil); |
12 | 6216 | end |
6217 | e:hook("disconnected",t,100); | |
6218 | e:hook("connected",function() | |
6219 | e:unhook("disconnected",t); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6220 | a(e.streamhosts[e.current_host],e); |
12 | 6221 | end,100); |
6222 | t(); | |
6223 | return e; | |
6224 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6225 | function t.plugins.jingle_s5b(e) |
12 | 6226 | e:hook("ready",function() |
6227 | e:add_disco_feature(o); | |
6228 | end,10); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6229 | local a={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6230 | function a:generate_initiate() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6231 | self.s5b_sid=s(); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6232 | local a=t.stanza("transport",{xmlns=o, |
12 | 6233 | mode="tcp",sid=self.s5b_sid}); |
6234 | local t=0; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6235 | for i,o in pairs(e.proxy65.available_streamhosts)do |
12 | 6236 | t=t+1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6237 | a:tag("candidate",{jid=i,host=o.host, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6238 | port=o.port,cid=i,priority=t,type="proxy"}):up(); |
12 | 6239 | end |
6240 | e:debug("Have %d proxies",t) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6241 | return a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6242 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6243 | function a:generate_accept(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6244 | local a={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6245 | self.s5b_peer_candidates=a; |
12 | 6246 | self.s5b_mode=e.attr.mode or"tcp"; |
6247 | self.s5b_sid=e.attr.sid or self.jingle.sid; | |
6248 | for e in e:childtags()do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6249 | a[e.attr.cid]={ |
12 | 6250 | type=e.attr.type; |
6251 | jid=e.attr.jid; | |
6252 | host=e.attr.host; | |
6253 | port=tonumber(e.attr.port)or 0; | |
6254 | priority=tonumber(e.attr.priority)or 0; | |
6255 | cid=e.attr.cid; | |
6256 | }; | |
6257 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6258 | local e=t.stanza("transport",{xmlns=o}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6259 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6260 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6261 | function a:connect(i) |
12 | 6262 | e:warn("Connecting!"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6263 | local a={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6264 | for t,e in pairs(self.s5b_peer_candidates or{})do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6265 | a[#a+1]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6266 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6267 | if#a>0 then |
12 | 6268 | self.connecting_peer_candidates=true; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6269 | local function s(e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6270 | self.jingle:send_command("transport-info",t.stanza("content",{creator=self.creator,name=self.name}) |
12 | 6271 | :tag("transport",{xmlns=o,sid=self.s5b_sid}) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6272 | :tag("candidate-used",{cid=e.cid})); |
12 | 6273 | self.onconnect_callback=i; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6274 | self.conn=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6275 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6276 | local e=h(self.s5b_sid..self.peer..e.jid,true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6277 | n(s,a,e); |
12 | 6278 | else |
6279 | e:warn("Actually, I'm going to wait for my peer to tell me its streamhost..."); | |
6280 | self.onconnect_callback=i; | |
6281 | end | |
6282 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6283 | function a:info_received(a) |
12 | 6284 | e:warn("Info received"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6285 | local s=a:child_with_name("content"); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6286 | local i=s:child_with_name("transport"); |
12 | 6287 | if i:get_child("candidate-used")and not self.connecting_peer_candidates then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6288 | local a=i:child_with_name("candidate-used"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6289 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6290 | local function i(i,e) |
12 | 6291 | if self.jingle.role=="initiator"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6292 | self.jingle.stream:send_iq(t.iq({to=i.jid,type="set"}) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6293 | :tag("query",{xmlns=r,sid=self.s5b_sid}) |
12 | 6294 | :tag("activate"):text(self.jingle.peer),function(i) |
6295 | if i.attr.type=="result"then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6296 | self.jingle:send_command("transport-info",t.stanza("content",s.attr) |
12 | 6297 | :tag("transport",{xmlns=o,sid=self.s5b_sid}) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6298 | :tag("activated",{cid=a.attr.cid})); |
12 | 6299 | self.conn=e; |
6300 | self.onconnect_callback(e); | |
6301 | else | |
6302 | self.jingle.stream:error("Failed to activate bytestream"); | |
6303 | end | |
6304 | end); | |
6305 | end | |
6306 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6307 | self.jingle.stream:debug("CID: %s",self.jingle.stream.proxy65.available_streamhosts[a.attr.cid]); |
12 | 6308 | local t={ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6309 | self.jingle.stream.proxy65.available_streamhosts[a.attr.cid]; |
12 | 6310 | }; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6311 | local e=h(self.s5b_sid..e.jid..self.peer,true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6312 | n(i,t,e); |
12 | 6313 | end |
6314 | elseif i:get_child("activated")then | |
6315 | self.onconnect_callback(self.conn); | |
6316 | end | |
6317 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6318 | function a:disconnect() |
12 | 6319 | if self.conn then |
6320 | self.conn:close(); | |
6321 | end | |
6322 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6323 | function a:handle_accepted(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6324 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6325 | local t={__index=a}; |
12 | 6326 | e:hook("jingle/transport/"..o,function(e) |
6327 | return setmetatable({ | |
6328 | role=e.role, | |
6329 | peer=e.peer, | |
6330 | stream=e.stream, | |
6331 | jingle=e, | |
6332 | },t); | |
6333 | end); | |
6334 | end | |
6335 | end) | |
6336 | package.preload['verse.plugins.proxy65']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6337 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6338 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6339 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6340 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6341 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6342 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6343 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6344 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6345 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6346 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6347 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6348 | local a=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6349 | local d=require"util.uuid"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6350 | local r=require"util.hashes".sha1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6351 | local n={}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6352 | n.__index=n; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6353 | local i="http://jabber.org/protocol/bytestreams"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6354 | local s; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6355 | function a.plugins.proxy65(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6356 | t.proxy65=setmetatable({stream=t},n); |
12 | 6357 | t.proxy65.available_streamhosts={}; |
6358 | local e=0; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6359 | t:hook("disco/service-discovered/proxy",function(o) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6360 | if o.type=="bytestreams"then |
12 | 6361 | e=e+1; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6362 | t:send_iq(a.iq({to=o.jid,type="get"}) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6363 | :tag("query",{xmlns=i}),function(a) |
12 | 6364 | e=e-1; |
6365 | if a.attr.type=="result"then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6366 | local e=a:get_child("query",i) |
12 | 6367 | :get_child("streamhost").attr; |
6368 | t.proxy65.available_streamhosts[e.jid]={ | |
6369 | jid=e.jid; | |
6370 | host=e.host; | |
6371 | port=tonumber(e.port); | |
6372 | }; | |
6373 | end | |
6374 | if e==0 then | |
6375 | t:event("proxy65/discovered-proxies",t.proxy65.available_streamhosts); | |
6376 | end | |
6377 | end); | |
6378 | end | |
6379 | end); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6380 | t:hook("iq/"..i,function(o) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6381 | local e=a.new(nil,{ |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6382 | initiator_jid=o.attr.from, |
12 | 6383 | streamhosts={}, |
6384 | current_host=0; | |
6385 | }); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6386 | for t in o.tags[1]:childtags()do |
12 | 6387 | if t.name=="streamhost"then |
6388 | table.insert(e.streamhosts,t.attr); | |
6389 | end | |
6390 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6391 | local function i() |
12 | 6392 | if e.current_host<#e.streamhosts then |
6393 | e.current_host=e.current_host+1; | |
6394 | e:connect( | |
6395 | e.streamhosts[e.current_host].host, | |
6396 | e.streamhosts[e.current_host].port | |
6397 | ); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6398 | s(t,e,o.tags[1].attr.sid,o.attr.from,t.jid); |
12 | 6399 | return true; |
6400 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6401 | e:unhook("disconnected",i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6402 | t:send(a.error_reply(o,"cancel","item-not-found")); |
12 | 6403 | end |
6404 | function e:accept() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6405 | e:hook("disconnected",i,100); |
12 | 6406 | e:hook("connected",function() |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6407 | e:unhook("disconnected",i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6408 | local e=a.reply(o) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6409 | :tag("query",o.tags[1].attr) |
12 | 6410 | :tag("streamhost-used",{jid=e.streamhosts[e.current_host].jid}); |
6411 | t:send(e); | |
6412 | end,100); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6413 | i(); |
12 | 6414 | end |
6415 | function e:refuse() | |
6416 | end | |
6417 | t:event("proxy65/request",e); | |
6418 | end); | |
6419 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6420 | function n:new(t,h) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6421 | local e=a.new(nil,{ |
12 | 6422 | target_jid=t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6423 | bytestream_sid=d.generate(); |
12 | 6424 | }); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6425 | local o=a.iq{type="set",to=t} |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6426 | :tag("query",{xmlns=i,mode="tcp",sid=e.bytestream_sid}); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6427 | for t,e in ipairs(h or self.proxies)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6428 | o:tag("streamhost",e):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6429 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6430 | self.stream:send_iq(o,function(o) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6431 | if o.attr.type=="error"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6432 | local a,t,o=o:get_error(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6433 | e:event("connection-failed",{conn=e,type=a,condition=t,text=o}); |
12 | 6434 | else |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6435 | local o=o.tags[1]:get_child("streamhost-used"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6436 | e.streamhost_jid=o.attr.jid; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6437 | local n,o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6438 | for a,t in ipairs(h or self.proxies)do |
12 | 6439 | if t.jid==e.streamhost_jid then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6440 | n,o=t.host,t.port; |
12 | 6441 | break; |
6442 | end | |
6443 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6444 | e:connect(n,o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6445 | local function o() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6446 | e:unhook("connected",o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6447 | local t=a.iq{to=e.streamhost_jid,type="set"} |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6448 | :tag("query",{xmlns=i,sid=e.bytestream_sid}) |
12 | 6449 | :tag("activate"):text(t); |
6450 | self.stream:send_iq(t,function(t) | |
6451 | if t.attr.type=="result"then | |
6452 | e:event("connected",e); | |
6453 | end | |
6454 | end); | |
6455 | return true; | |
6456 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6457 | e:hook("connected",o,100); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6458 | s(self.stream,e,e.bytestream_sid,self.stream.jid,t); |
12 | 6459 | end |
6460 | end); | |
6461 | return e; | |
6462 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6463 | function s(i,e,a,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6464 | local a=r(a..t..o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6465 | local function t() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6466 | e:unhook("connected",t); |
12 | 6467 | return true; |
6468 | end | |
6469 | local function o(t) | |
6470 | e:unhook("incoming-raw",o); | |
6471 | if t:sub(1,2)~="\005\000"then | |
6472 | return e:event("error","connection-failure"); | |
6473 | end | |
6474 | e:event("connected"); | |
6475 | return true; | |
6476 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6477 | local function i(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6478 | e:unhook("incoming-raw",i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6479 | if t~="\005\000"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6480 | local a="version-mismatch"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6481 | if t:sub(1,1)=="\005"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6482 | a="authentication-failure"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6483 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6484 | return e:event("error",a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6485 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6486 | e:send(string.char(5,1,0,3,#a)..a.."\0\0"); |
12 | 6487 | e:hook("incoming-raw",o,100); |
6488 | return true; | |
6489 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6490 | e:hook("connected",t,200); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6491 | e:hook("incoming-raw",i,100); |
12 | 6492 | e:send("\005\001\000"); |
6493 | end | |
6494 | end) | |
6495 | package.preload['verse.plugins.jingle_ibb']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6496 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6497 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6498 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6499 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6500 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6501 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6502 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6503 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6504 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6505 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6506 | end |
12 | 6507 | local e=require"verse"; |
6508 | local i=require"util.encodings".base64; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6509 | local s=require"util.uuid".generate; |
12 | 6510 | local n="urn:xmpp:jingle:transports:ibb:1"; |
6511 | local o="http://jabber.org/protocol/ibb"; | |
6512 | assert(i.encode("This is a test.")=="VGhpcyBpcyBhIHRlc3Qu","Base64 encoding failed"); | |
6513 | assert(i.decode("VGhpcyBpcyBhIHRlc3Qu")=="This is a test.","Base64 decoding failed"); | |
6514 | local t=table.concat | |
6515 | local a={}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6516 | local t={__index=a}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6517 | local function h(a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6518 | local t=setmetatable({stream=a},t) |
12 | 6519 | t=e.eventable(t); |
6520 | return t; | |
6521 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6522 | function a:initiate(e,t,a) |
12 | 6523 | self.block=2048; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6524 | self.stanza=a or'iq'; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6525 | self.peer=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6526 | self.sid=t or tostring(self):match("%x+$"); |
12 | 6527 | self.iseq=0; |
6528 | self.oseq=0; | |
6529 | local e=function(e) | |
6530 | return self:feed(e) | |
6531 | end | |
6532 | self.feeder=e; | |
6533 | print("Hooking incomming IQs"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6534 | local t=self.stream; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6535 | t:hook("iq/"..o,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6536 | if a=="message"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6537 | t:hook("message",e) |
12 | 6538 | end |
6539 | end | |
6540 | function a:open(t) | |
6541 | self.stream:send_iq(e.iq{to=self.peer,type="set"} | |
6542 | :tag("open",{ | |
6543 | xmlns=o, | |
6544 | ["block-size"]=self.block, | |
6545 | sid=self.sid, | |
6546 | stanza=self.stanza | |
6547 | }) | |
6548 | ,function(e) | |
6549 | if t then | |
6550 | if e.attr.type~="error"then | |
6551 | t(true) | |
6552 | else | |
6553 | t(false,e:get_error()) | |
6554 | end | |
6555 | end | |
6556 | end); | |
6557 | end | |
6558 | function a:send(n) | |
6559 | local a=self.stanza; | |
6560 | local t; | |
6561 | if a=="iq"then | |
6562 | t=e.iq{type="set",to=self.peer} | |
6563 | elseif a=="message"then | |
6564 | t=e.message{to=self.peer} | |
6565 | end | |
6566 | local e=self.oseq; | |
6567 | self.oseq=e+1; | |
6568 | t:tag("data",{xmlns=o,sid=self.sid,seq=e}) | |
6569 | :text(i.encode(n)); | |
6570 | if a=="iq"then | |
6571 | self.stream:send_iq(t,function(e) | |
6572 | self:event(e.attr.type=="result"and"drained"or"error"); | |
6573 | end) | |
6574 | else | |
6575 | stream:send(t) | |
6576 | self:event("drained"); | |
6577 | end | |
6578 | end | |
6579 | function a:feed(t) | |
6580 | if t.attr.from~=self.peer then return end | |
6581 | local a=t[1]; | |
6582 | if a.attr.sid~=self.sid then return end | |
6583 | local n; | |
6584 | if a.name=="open"then | |
6585 | self:event("connected"); | |
6586 | self.stream:send(e.reply(t)) | |
6587 | return true | |
6588 | elseif a.name=="data"then | |
6589 | local o=t:get_child_text("data",o); | |
6590 | local a=tonumber(a.attr.seq); | |
6591 | local n=self.iseq; | |
6592 | if o and a then | |
6593 | if a~=n then | |
6594 | self.stream:send(e.error_reply(t,"cancel","not-acceptable","Wrong sequence. Packet lost?")) | |
6595 | self:close(); | |
6596 | self:event("error"); | |
6597 | return true; | |
6598 | end | |
6599 | self.iseq=a+1; | |
6600 | local a=i.decode(o); | |
6601 | if self.stanza=="iq"then | |
6602 | self.stream:send(e.reply(t)) | |
6603 | end | |
6604 | self:event("incoming-raw",a); | |
6605 | return true; | |
6606 | end | |
6607 | elseif a.name=="close"then | |
6608 | self.stream:send(e.reply(t)) | |
6609 | self:close(); | |
6610 | return true | |
6611 | end | |
6612 | end | |
6613 | function a:close() | |
6614 | self.stream:unhook("iq/"..o,self.feeder) | |
6615 | self:event("disconnected"); | |
6616 | end | |
6617 | function e.plugins.jingle_ibb(a) | |
6618 | a:hook("ready",function() | |
6619 | a:add_disco_feature(n); | |
6620 | end,10); | |
6621 | local t={}; | |
6622 | function t:_setup() | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6623 | local e=h(self.stream); |
12 | 6624 | e.sid=self.sid or e.sid; |
6625 | e.stanza=self.stanza or e.stanza; | |
6626 | e.block=self.block or e.block; | |
6627 | e:initiate(self.peer,self.sid,self.stanza); | |
6628 | self.conn=e; | |
6629 | end | |
6630 | function t:generate_initiate() | |
6631 | print("ibb:generate_initiate() as "..self.role); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6632 | local t=s(); |
12 | 6633 | self.sid=t; |
6634 | self.stanza='iq'; | |
6635 | self.block=2048; | |
6636 | local e=e.stanza("transport",{xmlns=n, | |
6637 | sid=self.sid,stanza=self.stanza,["block-size"]=self.block}); | |
6638 | return e; | |
6639 | end | |
6640 | function t:generate_accept(t) | |
6641 | print("ibb:generate_accept() as "..self.role); | |
6642 | local e=t.attr; | |
6643 | self.sid=e.sid or self.sid; | |
6644 | self.stanza=e.stanza or self.stanza; | |
6645 | self.block=e["block-size"]or self.block; | |
6646 | self:_setup(); | |
6647 | return t; | |
6648 | end | |
6649 | function t:connect(t) | |
6650 | if not self.conn then | |
6651 | self:_setup(); | |
6652 | end | |
6653 | local e=self.conn; | |
6654 | print("ibb:connect() as "..self.role); | |
6655 | if self.role=="initiator"then | |
6656 | e:open(function(a,...) | |
6657 | assert(a,table.concat({...},", ")); | |
6658 | t(e); | |
6659 | end); | |
6660 | else | |
6661 | t(e); | |
6662 | end | |
6663 | end | |
6664 | function t:info_received(e) | |
6665 | print("ibb:info_received()"); | |
6666 | end | |
6667 | function t:disconnect() | |
6668 | if self.conn then | |
6669 | self.conn:close() | |
6670 | end | |
6671 | end | |
6672 | function t:handle_accepted(e)end | |
6673 | local t={__index=t}; | |
6674 | a:hook("jingle/transport/"..n,function(e) | |
6675 | return setmetatable({ | |
6676 | role=e.role, | |
6677 | peer=e.peer, | |
6678 | stream=e.stream, | |
6679 | jingle=e, | |
6680 | },t); | |
6681 | end); | |
6682 | end | |
6683 | end) | |
6684 | package.preload['verse.plugins.pubsub']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6685 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6686 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6687 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6688 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6689 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6690 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6691 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6692 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6693 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6694 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6695 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6696 | local i=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6697 | local n=table.insert; |
12 | 6698 | local o="http://jabber.org/protocol/pubsub"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6699 | local h="http://jabber.org/protocol/pubsub#owner"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6700 | local a="http://jabber.org/protocol/pubsub#event"; |
12 | 6701 | local e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6702 | local s={__index=e}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6703 | function i.plugins.pubsub(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6704 | e.pubsub=setmetatable({stream=e},s); |
12 | 6705 | e:hook("message",function(t) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6706 | local o=t.attr.from; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6707 | for t in t:childtags("event",a)do |
12 | 6708 | local t=t:get_child("items"); |
6709 | if t then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6710 | local a=t.attr.node; |
12 | 6711 | for t in t:childtags("item")do |
6712 | e:event("pubsub/event",{ | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6713 | from=o; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6714 | node=a; |
12 | 6715 | item=t; |
6716 | }); | |
6717 | end | |
6718 | end | |
6719 | end | |
6720 | end); | |
6721 | return true; | |
6722 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6723 | function e:create(e,a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6724 | return self:service(e):node(a):create(nil,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6725 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6726 | function e:subscribe(a,e,o,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6727 | return self:service(a):node(e):subscribe(o,nil,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6728 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6729 | function e:publish(e,a,o,i,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6730 | return self:service(e):node(a):publish(o,nil,i,t); |
12 | 6731 | end |
6732 | local a={}; | |
6733 | local t={__index=a}; | |
6734 | function e:service(e) | |
6735 | return setmetatable({stream=self.stream,service=e},t) | |
6736 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6737 | local function t(h,e,r,a,s,n,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6738 | local e=i.iq{type=h or"get",to=e} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6739 | :tag("pubsub",{xmlns=r or o}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6740 | if a then e:tag(a,{node=s,jid=n});end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6741 | if t then e:tag("item",{id=t~=true and t or nil});end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6742 | return e; |
12 | 6743 | end |
6744 | function a:subscriptions(a) | |
6745 | self.stream:send_iq(t(nil,self.service,nil,"subscriptions") | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6746 | ,a and function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6747 | if t.attr.type=="result"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6748 | local e=t:get_child("pubsub",o); |
12 | 6749 | local e=e and e:get_child("subscriptions"); |
6750 | local o={}; | |
6751 | if e then | |
6752 | for t in e:childtags("subscription")do | |
6753 | local e=self:node(t.attr.node) | |
6754 | e.subscription=t; | |
6755 | e.subscribed_jid=t.attr.jid; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6756 | n(o,e); |
12 | 6757 | end |
6758 | end | |
6759 | a(o); | |
6760 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6761 | a(false,t:get_error()); |
12 | 6762 | end |
6763 | end or nil); | |
6764 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6765 | function a:affiliations(a) |
12 | 6766 | self.stream:send_iq(t(nil,self.service,nil,"affiliations") |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6767 | ,a and function(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6768 | if e.attr.type=="result"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6769 | local e=e:get_child("pubsub",o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6770 | local e=e and e:get_child("affiliations")or{}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6771 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6772 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6773 | for e in e:childtags("affiliation")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6774 | local a=self:node(e.attr.node) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6775 | a.affiliation=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6776 | n(t,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6777 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6778 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6779 | a(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6780 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6781 | a(false,e:get_error()); |
12 | 6782 | end |
6783 | end or nil); | |
6784 | end | |
6785 | function a:nodes(a) | |
6786 | self.stream:disco_items(self.service,nil,function(e,...) | |
6787 | if e then | |
6788 | for t=1,#e do | |
6789 | e[t]=self:node(e[t].node); | |
6790 | end | |
6791 | end | |
6792 | a(e,...) | |
6793 | end); | |
6794 | end | |
6795 | local e={}; | |
6796 | local o={__index=e}; | |
6797 | function a:node(e) | |
6798 | return setmetatable({stream=self.stream,service=self.service,node=e},o) | |
6799 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6800 | function s:__call(t,e) |
12 | 6801 | local t=self:service(t); |
6802 | return e and t:node(e)or t; | |
6803 | end | |
6804 | function e:hook(a,o) | |
6805 | self._hooks=self._hooks or setmetatable({},{__mode='kv'}); | |
6806 | local function t(e) | |
6807 | if(not e.service or e.from==self.service)and e.node==self.node then | |
6808 | return a(e) | |
6809 | end | |
6810 | end | |
6811 | self._hooks[a]=t; | |
6812 | self.stream:hook("pubsub/event",t,o); | |
6813 | return t; | |
6814 | end | |
6815 | function e:unhook(e) | |
6816 | if e then | |
6817 | local e=self._hooks[e]; | |
6818 | self.stream:unhook("pubsub/event",e); | |
6819 | elseif self._hooks then | |
6820 | for e in pairs(self._hooks)do | |
6821 | self.stream:unhook("pubsub/event",e); | |
6822 | end | |
6823 | end | |
6824 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6825 | function e:create(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6826 | if a~=nil then |
12 | 6827 | error("Not implemented yet."); |
6828 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6829 | self.stream:send_iq(t("set",self.service,nil,"create",self.node),e); |
12 | 6830 | end |
6831 | end | |
6832 | function e:configure(e,a) | |
6833 | if e~=nil then | |
6834 | error("Not implemented yet."); | |
6835 | end | |
6836 | self.stream:send_iq(t("set",self.service,nil,e==nil and"default"or"configure",self.node),a); | |
6837 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6838 | function e:publish(a,e,o,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6839 | if e~=nil then |
12 | 6840 | error("Node configuration is not implemented yet."); |
6841 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6842 | self.stream:send_iq(t("set",self.service,nil,"publish",self.node,nil,a or true) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6843 | :add_child(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6844 | ,i); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6845 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6846 | function e:subscribe(e,o,a) |
12 | 6847 | e=e or self.stream.jid; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6848 | if o~=nil then |
12 | 6849 | error("Subscription configuration is not implemented yet."); |
6850 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6851 | self.stream:send_iq(t("set",self.service,nil,"subscribe",self.node,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6852 | ,a); |
12 | 6853 | end |
6854 | function e:subscription(e) | |
6855 | error("Not implemented yet."); | |
6856 | end | |
6857 | function e:affiliation(e) | |
6858 | error("Not implemented yet."); | |
6859 | end | |
6860 | function e:unsubscribe(e,a) | |
6861 | e=e or self.subscribed_jid or self.stream.jid; | |
6862 | self.stream:send_iq(t("set",self.service,nil,"unsubscribe",self.node,e) | |
6863 | ,a); | |
6864 | end | |
6865 | function e:configure_subscription(e,e) | |
6866 | error("Not implemented yet."); | |
6867 | end | |
6868 | function e:items(a,e) | |
6869 | if a then | |
6870 | self.stream:send_iq(t("get",self.service,nil,"items",self.node) | |
6871 | ,e); | |
6872 | else | |
6873 | self.stream:disco_items(self.service,self.node,e); | |
6874 | end | |
6875 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6876 | function e:item(e,a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6877 | self.stream:send_iq(t("get",self.service,nil,"items",self.node,nil,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6878 | ,a); |
12 | 6879 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6880 | function e:retract(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6881 | self.stream:send_iq(t("set",self.service,nil,"retract",self.node,nil,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6882 | ,e); |
12 | 6883 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6884 | function e:purge(a,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6885 | assert(not a,"Not implemented yet."); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6886 | self.stream:send_iq(t("set",self.service,h,"purge",self.node) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
6887 | ,e); |
12 | 6888 | end |
6889 | function e:delete(a,e) | |
6890 | assert(not a,"Not implemented yet."); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6891 | self.stream:send_iq(t("set",self.service,h,"delete",self.node) |
12 | 6892 | ,e); |
6893 | end | |
6894 | end) | |
6895 | package.preload['verse.plugins.pep']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6896 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6897 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6898 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6899 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6900 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6901 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6902 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6903 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6904 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6905 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6906 | end |
12 | 6907 | local e=require"verse"; |
6908 | local t="http://jabber.org/protocol/pubsub"; | |
6909 | local t=t.."#event"; | |
6910 | function e.plugins.pep(e) | |
6911 | e:add_plugin("disco"); | |
6912 | e:add_plugin("pubsub"); | |
6913 | e.pep={}; | |
6914 | e:hook("pubsub/event",function(t) | |
6915 | return e:event("pep/"..t.node,{from=t.from,item=t.item.tags[1]}); | |
6916 | end); | |
6917 | function e:hook_pep(t,i,o) | |
6918 | local a=e.events._handlers["pep/"..t]; | |
6919 | if not(a)or#a==0 then | |
6920 | e:add_disco_feature(t.."+notify"); | |
6921 | end | |
6922 | e:hook("pep/"..t,i,o); | |
6923 | end | |
6924 | function e:unhook_pep(t,a) | |
6925 | e:unhook("pep/"..t,a); | |
6926 | local a=e.events._handlers["pep/"..t]; | |
6927 | if not(a)or#a==0 then | |
6928 | e:remove_disco_feature(t.."+notify"); | |
6929 | end | |
6930 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6931 | function e:publish_pep(t,a,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6932 | return e.pubsub:service(nil):node(a or t.attr.xmlns):publish(o or"current",nil,t) |
12 | 6933 | end |
6934 | end | |
6935 | end) | |
6936 | package.preload['verse.plugins.adhoc']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6937 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6938 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6939 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6940 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6941 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6942 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6943 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6944 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6945 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6946 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6947 | end |
12 | 6948 | local o=require"verse"; |
6949 | local n=require"lib.adhoc"; | |
6950 | local t="http://jabber.org/protocol/commands"; | |
6951 | local s="jabber:x:data"; | |
6952 | local a={}; | |
6953 | a.__index=a; | |
6954 | local i={}; | |
6955 | function o.plugins.adhoc(e) | |
6956 | e:add_plugin("disco"); | |
6957 | e:add_disco_feature(t); | |
6958 | function e:query_commands(a,o) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6959 | e:disco_items(a,t,function(a) |
12 | 6960 | e:debug("adhoc list returned") |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6961 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6962 | for o,a in ipairs(a)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6963 | t[a.node]=a.name; |
12 | 6964 | end |
6965 | e:debug("adhoc calling callback") | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6966 | return o(t); |
12 | 6967 | end); |
6968 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6969 | function e:execute_command(t,i,o) |
12 | 6970 | local e=setmetatable({ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6971 | stream=e,jid=t, |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6972 | command=i,callback=o |
12 | 6973 | },a); |
6974 | return e:execute(); | |
6975 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6976 | local function h(t,e) |
12 | 6977 | if not(e)or e=="user"then return true;end |
6978 | if type(e)=="function"then | |
6979 | return e(t); | |
6980 | end | |
6981 | end | |
6982 | function e:add_adhoc_command(o,a,h,s) | |
6983 | i[a]=n.new(o,a,h,s); | |
6984 | e:add_disco_item({jid=e.jid,node=a,name=o},t); | |
6985 | return i[a]; | |
6986 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6987 | local function s(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6988 | local t=a.tags[1]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6989 | local t=t.attr.node; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6990 | local t=i[t]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6991 | if not t then return;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6992 | if not h(a.attr.from,t.permission)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6993 | e:send(o.error_reply(a,"auth","forbidden","You don't have permission to execute this command"):up() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6994 | :add_child(t:cmdtag("canceled") |
12 | 6995 | :tag("note",{type="error"}):text("You don't have permission to execute this command"))); |
6996 | return true | |
6997 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
6998 | return n.handle_cmd(t,{send=function(t)return e:send(t)end},a); |
12 | 6999 | end |
7000 | e:hook("iq/"..t,function(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7001 | local a=e.attr.type; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7002 | local t=e.tags[1].name; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7003 | if a=="set"and t=="command"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7004 | return s(e); |
12 | 7005 | end |
7006 | end); | |
7007 | end | |
7008 | function a:_process_response(e) | |
7009 | if e.attr.type=="error"then | |
7010 | self.status="canceled"; | |
7011 | self.callback(self,{}); | |
7012 | return; | |
7013 | end | |
7014 | local e=e:get_child("command",t); | |
7015 | self.status=e.attr.status; | |
7016 | self.sessionid=e.attr.sessionid; | |
7017 | self.form=e:get_child("x",s); | |
7018 | self.note=e:get_child("note"); | |
7019 | self.callback(self); | |
7020 | end | |
7021 | function a:execute() | |
7022 | local e=o.iq({to=self.jid,type="set"}) | |
7023 | :tag("command",{xmlns=t,node=self.command}); | |
7024 | self.stream:send_iq(e,function(e) | |
7025 | self:_process_response(e); | |
7026 | end); | |
7027 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7028 | function a:next(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7029 | local t=o.iq({to=self.jid,type="set"}) |
12 | 7030 | :tag("command",{ |
7031 | xmlns=t, | |
7032 | node=self.command, | |
7033 | sessionid=self.sessionid | |
7034 | }); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7035 | if e then t:add_child(e);end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7036 | self.stream:send_iq(t,function(e) |
12 | 7037 | self:_process_response(e); |
7038 | end); | |
7039 | end | |
7040 | end) | |
7041 | package.preload['verse.plugins.presence']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7042 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7043 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7044 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7045 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7046 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7047 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7048 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7049 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7050 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7051 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7052 | end |
12 | 7053 | local a=require"verse"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7054 | function a.plugins.presence(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7055 | t.last_presence=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7056 | t:hook("presence-out",function(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7057 | if not e.attr.to then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7058 | t.last_presence=e; |
12 | 7059 | end |
7060 | end,1); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7061 | function t:resend_presence() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7062 | if self.last_presence then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7063 | t:send(self.last_presence); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7064 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7065 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7066 | function t:set_status(e) |
12 | 7067 | local a=a.presence(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7068 | if type(e)=="table"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7069 | if e.show then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7070 | a:tag("show"):text(e.show):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7071 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7072 | if e.priority or e.prio then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7073 | a:tag("priority"):text(tostring(e.priority or e.prio)):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7074 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7075 | if e.status or e.msg then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7076 | a:tag("status"):text(e.status or e.msg):up(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7077 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7078 | elseif type(e)=="string"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7079 | a:tag("status"):text(e):up(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7080 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7081 | t:send(a); |
12 | 7082 | end |
7083 | end | |
7084 | end) | |
7085 | package.preload['verse.plugins.private']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7086 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7087 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7088 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7089 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7090 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7091 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7092 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7093 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7094 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7095 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7096 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7097 | local a=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7098 | local t="jabber:iq:private"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7099 | function a.plugins.private(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7100 | function o:private_set(i,o,e,n) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7101 | local t=a.iq({type="set"}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7102 | :tag("query",{xmlns=t}); |
12 | 7103 | if e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7104 | if e.name==i and e.attr and e.attr.xmlns==o then |
12 | 7105 | t:add_child(e); |
7106 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7107 | t:tag(i,{xmlns=o}) |
12 | 7108 | :add_child(e); |
7109 | end | |
7110 | end | |
7111 | self:send_iq(t,n); | |
7112 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7113 | function o:private_get(o,e,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7114 | self:send_iq(a.iq({type="get"}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7115 | :tag("query",{xmlns=t}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7116 | :tag(o,{xmlns=e}), |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7117 | function(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7118 | if a.attr.type=="result"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7119 | local t=a:get_child("query",t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7120 | local e=t:get_child(o,e); |
12 | 7121 | i(e); |
7122 | end | |
7123 | end); | |
7124 | end | |
7125 | end | |
7126 | end) | |
7127 | package.preload['verse.plugins.roster']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7128 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7129 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7130 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7131 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7132 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7133 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7134 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7135 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7136 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7137 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7138 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7139 | local i=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7140 | local l=require"util.jid".bare; |
12 | 7141 | local a="jabber:iq:roster"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7142 | local o="urn:xmpp:features:rosterver"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7143 | local n=table.insert; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7144 | function i.plugins.roster(t) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7145 | local h=false; |
12 | 7146 | local e={ |
7147 | items={}; | |
7148 | ver=""; | |
7149 | }; | |
7150 | t.roster=e; | |
7151 | t:hook("stream-features",function(e) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7152 | if e:get_child("ver",o)then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7153 | h=true; |
12 | 7154 | end |
7155 | end); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7156 | local function s(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7157 | local e=i.stanza("item",{xmlns=a}); |
12 | 7158 | for a,t in pairs(t)do |
7159 | if a~="groups"then | |
7160 | e.attr[a]=t; | |
7161 | else | |
7162 | for a=1,#t do | |
7163 | e:tag("group"):text(t[a]):up(); | |
7164 | end | |
7165 | end | |
7166 | end | |
7167 | return e; | |
7168 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7169 | local function d(a) |
12 | 7170 | local e={}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7171 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7172 | e.groups=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7173 | for t,a in pairs(a.attr)do |
12 | 7174 | if t~="xmlns"then |
7175 | e[t]=a | |
7176 | end | |
7177 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7178 | for e in a:childtags("group")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7179 | n(t,e:get_text()) |
12 | 7180 | end |
7181 | return e; | |
7182 | end | |
7183 | function e:load(t) | |
7184 | e.ver,e.items=t.ver,t.items; | |
7185 | end | |
7186 | function e:dump() | |
7187 | return{ | |
7188 | ver=e.ver, | |
7189 | items=e.items, | |
7190 | }; | |
7191 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7192 | function e:add_contact(n,o,h,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7193 | local o={jid=n,name=o,groups=h}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7194 | local a=i.iq({type="set"}) |
12 | 7195 | :tag("query",{xmlns=a}) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7196 | :add_child(s(o)); |
12 | 7197 | t:send_iq(a,function(t) |
7198 | if not e then return end | |
7199 | if t.attr.type=="result"then | |
7200 | e(true); | |
7201 | else | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7202 | e(nil,t); |
12 | 7203 | end |
7204 | end); | |
7205 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7206 | function e:delete_contact(o,n) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7207 | o=(type(o)=="table"and o.jid)or o; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7208 | local h={jid=o,subscription="remove"} |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7209 | if not e.items[o]then return false,"item-not-found";end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7210 | t:send_iq(i.iq({type="set"}) |
12 | 7211 | :tag("query",{xmlns=a}) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7212 | :add_child(s(h)), |
12 | 7213 | function(e) |
7214 | if not n then return end | |
7215 | if e.attr.type=="result"then | |
7216 | n(true); | |
7217 | else | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7218 | n(nil,e); |
12 | 7219 | end |
7220 | end); | |
7221 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7222 | local function r(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7223 | local t=d(t); |
12 | 7224 | e.items[t.jid]=t; |
7225 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7226 | local function d(t) |
12 | 7227 | local a=e.items[t]; |
7228 | e.items[t]=nil; | |
7229 | return a; | |
7230 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7231 | function e:fetch(o) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7232 | t:send_iq(i.iq({type="get"}):tag("query",{xmlns=a,ver=h and e.ver or nil}), |
12 | 7233 | function(t) |
7234 | if t.attr.type=="result"then | |
7235 | local t=t:get_child("query",a); | |
7236 | if t then | |
7237 | e.items={}; | |
7238 | for t in t:childtags("item")do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7239 | r(t) |
12 | 7240 | end |
7241 | e.ver=t.attr.ver or""; | |
7242 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7243 | o(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7244 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7245 | o(nil,t); |
12 | 7246 | end |
7247 | end); | |
7248 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7249 | t:hook("iq/"..a,function(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7250 | local s,n=o.attr.type,o.attr.from; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7251 | if s=="set"and(not n or n==l(t.jid))then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7252 | local n=o:get_child("query",a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7253 | local a=n and n:get_child("item"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7254 | if a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7255 | local i,o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7256 | local s=a.attr.jid; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7257 | if a.attr.subscription=="remove"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7258 | i="removed" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7259 | o=d(s); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7260 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7261 | i=e.items[s]and"changed"or"added"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7262 | r(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7263 | o=e.items[s]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7264 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7265 | e.ver=n.attr.ver; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7266 | if o then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7267 | t:event("roster/item-"..i,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7268 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7269 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7270 | t:send(i.reply(o)) |
12 | 7271 | return true; |
7272 | end | |
7273 | end); | |
7274 | end | |
7275 | end) | |
7276 | package.preload['verse.plugins.register']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7277 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7278 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7279 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7280 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7281 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7282 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7283 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7284 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7285 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7286 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7287 | end |
12 | 7288 | local t=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7289 | local i="jabber:iq:register"; |
12 | 7290 | function t.plugins.register(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7291 | local function a(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7292 | if o:get_child("register","http://jabber.org/features/iq-register")then |
12 | 7293 | local t=t.iq({to=e.host_,type="set"}) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7294 | :tag("query",{xmlns=i}) |
12 | 7295 | :tag("username"):text(e.username):up() |
7296 | :tag("password"):text(e.password):up(); | |
7297 | if e.register_email then | |
7298 | t:tag("email"):text(e.register_email):up(); | |
7299 | end | |
7300 | e:send_iq(t,function(t) | |
7301 | if t.attr.type=="result"then | |
7302 | e:event("registration-success"); | |
7303 | else | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7304 | local a,t,o=t:get_error(); |
12 | 7305 | e:debug("Registration failed: %s",t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7306 | e:event("registration-failure",{type=a,condition=t,text=o}); |
12 | 7307 | end |
7308 | end); | |
7309 | else | |
7310 | e:debug("In-band registration not offered by server"); | |
7311 | e:event("registration-failure",{condition="service-unavailable"}); | |
7312 | end | |
7313 | e:unhook("stream-features",a); | |
7314 | return true; | |
7315 | end | |
7316 | e:hook("stream-features",a,310); | |
7317 | end | |
7318 | end) | |
7319 | package.preload['verse.plugins.groupchat']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7320 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7321 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7322 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7323 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7324 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7325 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7326 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7327 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7328 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7329 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7330 | end |
12 | 7331 | local i=require"verse"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7332 | local e=require"util.events"; |
12 | 7333 | local n=require"util.jid"; |
7334 | local a={}; | |
7335 | a.__index=a; | |
7336 | local h="urn:xmpp:delay"; | |
7337 | local s="http://jabber.org/protocol/muc"; | |
7338 | function i.plugins.groupchat(o) | |
7339 | o:add_plugin("presence") | |
7340 | o.rooms={}; | |
7341 | o:hook("stanza",function(e) | |
7342 | local a=n.bare(e.attr.from); | |
7343 | if not a then return end | |
7344 | local t=o.rooms[a] | |
7345 | if not t and e.attr.to and a then | |
7346 | t=o.rooms[e.attr.to.." "..a] | |
7347 | end | |
7348 | if t and t.opts.source and e.attr.to~=t.opts.source then return end | |
7349 | if t then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7350 | local o=select(3,n.split(e.attr.from)); |
12 | 7351 | local n=e:get_child_text("body"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7352 | local i=e:get_child("delay",h); |
12 | 7353 | local a={ |
7354 | room_jid=a; | |
7355 | room=t; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7356 | sender=t.occupants[o]; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7357 | nick=o; |
12 | 7358 | body=n; |
7359 | stanza=e; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7360 | delay=(i and i.attr.stamp); |
12 | 7361 | }; |
7362 | local t=t:event(e.name,a); | |
7363 | return t or(e.name=="message")or nil; | |
7364 | end | |
7365 | end,500); | |
7366 | function o:join_room(n,h,t) | |
7367 | if not h then | |
7368 | return false,"no nickname supplied" | |
7369 | end | |
7370 | t=t or{}; | |
7371 | local e=setmetatable(i.eventable{ | |
7372 | stream=o,jid=n,nick=h, | |
7373 | subject=nil, | |
7374 | occupants={}, | |
7375 | opts=t, | |
7376 | },a); | |
7377 | if t.source then | |
7378 | self.rooms[t.source.." "..n]=e; | |
7379 | else | |
7380 | self.rooms[n]=e; | |
7381 | end | |
7382 | local a=e.occupants; | |
7383 | e:hook("presence",function(o) | |
7384 | local t=o.nick or h; | |
7385 | if not a[t]and o.stanza.attr.type~="unavailable"then | |
7386 | a[t]={ | |
7387 | nick=t; | |
7388 | jid=o.stanza.attr.from; | |
7389 | presence=o.stanza; | |
7390 | }; | |
7391 | local o=o.stanza:get_child("x",s.."#user"); | |
7392 | if o then | |
7393 | local e=o:get_child("item"); | |
7394 | if e and e.attr then | |
7395 | a[t].real_jid=e.attr.jid; | |
7396 | a[t].affiliation=e.attr.affiliation; | |
7397 | a[t].role=e.attr.role; | |
7398 | end | |
7399 | end | |
7400 | if t==e.nick then | |
7401 | e.stream:event("groupchat/joined",e); | |
7402 | else | |
7403 | e:event("occupant-joined",a[t]); | |
7404 | end | |
7405 | elseif a[t]and o.stanza.attr.type=="unavailable"then | |
7406 | if t==e.nick then | |
7407 | e.stream:event("groupchat/left",e); | |
7408 | if e.opts.source then | |
7409 | self.rooms[e.opts.source.." "..n]=nil; | |
7410 | else | |
7411 | self.rooms[n]=nil; | |
7412 | end | |
7413 | else | |
7414 | a[t].presence=o.stanza; | |
7415 | e:event("occupant-left",a[t]); | |
7416 | a[t]=nil; | |
7417 | end | |
7418 | end | |
7419 | end); | |
7420 | e:hook("message",function(a) | |
7421 | local t=a.stanza:get_child_text("subject"); | |
7422 | if not t then return end | |
7423 | t=#t>0 and t or nil; | |
7424 | if t~=e.subject then | |
7425 | local o=e.subject; | |
7426 | e.subject=t; | |
7427 | return e:event("subject-changed",{from=o,to=t,by=a.sender,event=a}); | |
7428 | end | |
7429 | end,2e3); | |
7430 | local t=i.presence():tag("x",{xmlns=s}):reset(); | |
7431 | self:event("pre-groupchat/joining",t); | |
7432 | e:send(t) | |
7433 | self:event("groupchat/joining",e); | |
7434 | return e; | |
7435 | end | |
7436 | o:hook("presence-out",function(e) | |
7437 | if not e.attr.to then | |
7438 | for a,t in pairs(o.rooms)do | |
7439 | t:send(e); | |
7440 | end | |
7441 | e.attr.to=nil; | |
7442 | end | |
7443 | end); | |
7444 | end | |
7445 | function a:send(e) | |
7446 | if e.name=="message"and not e.attr.type then | |
7447 | e.attr.type="groupchat"; | |
7448 | end | |
7449 | if e.name=="presence"then | |
7450 | e.attr.to=self.jid.."/"..self.nick; | |
7451 | end | |
7452 | if e.attr.type=="groupchat"or not e.attr.to then | |
7453 | e.attr.to=self.jid; | |
7454 | end | |
7455 | if self.opts.source then | |
7456 | e.attr.from=self.opts.source | |
7457 | end | |
7458 | self.stream:send(e); | |
7459 | end | |
7460 | function a:send_message(e) | |
7461 | self:send(i.message():tag("body"):text(e)); | |
7462 | end | |
7463 | function a:set_subject(e) | |
7464 | self:send(i.message():tag("subject"):text(e)); | |
7465 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7466 | function a:leave(t) |
12 | 7467 | self.stream:event("groupchat/leaving",self); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7468 | local e=i.presence({type="unavailable"}); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7469 | if t then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7470 | e:tag("status"):text(t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7471 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7472 | self:send(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7473 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7474 | function a:admin_set(a,t,o,e) |
12 | 7475 | self:send(i.iq({type="set"}) |
7476 | :query(s.."#admin") | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7477 | :tag("item",{nick=a,[t]=o}) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7478 | :tag("reason"):text(e or"")); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7479 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7480 | function a:set_role(t,e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7481 | self:admin_set(t,"role",e,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7482 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7483 | function a:set_affiliation(a,e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7484 | self:admin_set(a,"affiliation",e,t); |
12 | 7485 | end |
7486 | function a:kick(e,t) | |
7487 | self:set_role(e,"none",t); | |
7488 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7489 | function a:ban(t,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7490 | self:set_affiliation(t,"outcast",e); |
12 | 7491 | end |
7492 | end) | |
7493 | package.preload['verse.plugins.vcard']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7494 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7495 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7496 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7497 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7498 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7499 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7500 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7501 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7502 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7503 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7504 | end |
12 | 7505 | local i=require"verse"; |
7506 | local o=require"util.vcard"; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7507 | local e="vcard-temp"; |
12 | 7508 | function i.plugins.vcard(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7509 | function a:get_vcard(n,t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7510 | a:send_iq(i.iq({to=n,type="get"}) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7511 | :tag("vCard",{xmlns=e}),t and function(a) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7512 | local e=a:get_child("vCard",e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7513 | if a.attr.type=="result"and e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7514 | e=o.from_xep54(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7515 | t(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7516 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7517 | t(false) |
12 | 7518 | end |
7519 | end or nil); | |
7520 | end | |
7521 | function a:set_vcard(e,n) | |
7522 | local t; | |
7523 | if type(e)=="table"and e.name then | |
7524 | t=e; | |
7525 | elseif type(e)=="string"then | |
7526 | t=o.to_xep54(o.from_text(e)[1]); | |
7527 | elseif type(e)=="table"then | |
7528 | t=o.to_xep54(e); | |
7529 | error("Converting a table to vCard not implemented") | |
7530 | end | |
7531 | if not t then return false end | |
7532 | a:debug("setting vcard to %s",tostring(t)); | |
7533 | a:send_iq(i.iq({type="set"}) | |
7534 | :add_child(t),n); | |
7535 | end | |
7536 | end | |
7537 | end) | |
7538 | package.preload['verse.plugins.vcard_update']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7539 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7540 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7541 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7542 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7543 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7544 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7545 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7546 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7547 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7548 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7549 | end |
12 | 7550 | local n=require"verse"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7551 | local i="vcard-temp:x:update"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7552 | local s=require("util.hashes").sha1; |
12 | 7553 | local e,t=pcall(function() |
7554 | local e=require("util.encodings").base64.decode; | |
7555 | assert(e("SGVsbG8=")=="Hello") | |
7556 | return e; | |
7557 | end); | |
7558 | if not e then | |
7559 | e,t=pcall(function()return require("mime").unb64;end); | |
7560 | if not e then | |
7561 | error("Could not find a base64 decoder") | |
7562 | end | |
7563 | end | |
7564 | local h=t; | |
7565 | function n.plugins.vcard_update(e) | |
7566 | e:add_plugin("vcard"); | |
7567 | e:add_plugin("presence"); | |
7568 | local t; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7569 | local function r(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7570 | local o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7571 | for e=1,#a do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7572 | if a[e].name=="PHOTO"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7573 | o=a[e][1]; |
12 | 7574 | break |
7575 | end | |
7576 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7577 | if o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7578 | local a=s(h(o),true); |
12 | 7579 | t=n.stanza("x",{xmlns=i}) |
7580 | :tag("photo"):text(a); | |
7581 | e:resend_presence() | |
7582 | else | |
7583 | t=nil; | |
7584 | end | |
7585 | end | |
7586 | local a; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7587 | e:hook("ready",function() |
12 | 7588 | if a then return;end |
7589 | a=true; | |
7590 | e:get_vcard(nil,function(t) | |
7591 | if t then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7592 | r(t) |
12 | 7593 | end |
7594 | e:event("ready"); | |
7595 | end); | |
7596 | return true; | |
7597 | end,3); | |
7598 | e:hook("presence-out",function(e) | |
7599 | if t and not e:get_child("x",i)then | |
7600 | e:add_child(t); | |
7601 | end | |
7602 | end,10); | |
7603 | end | |
7604 | end) | |
7605 | package.preload['verse.plugins.carbons']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7606 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7607 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7608 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7609 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7610 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7611 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7612 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7613 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7614 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7615 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7616 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7617 | local a=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7618 | local o="urn:xmpp:carbons:2"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7619 | local n="urn:xmpp:forward:0"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7620 | local s=os.time; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7621 | local r=require"util.datetime".parse; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7622 | local h=require"util.jid".bare; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7623 | function a.plugins.carbons(e) |
12 | 7624 | local t={}; |
7625 | t.enabled=false; | |
7626 | e.carbons=t; | |
7627 | function t:enable(i) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7628 | e:send_iq(a.iq{type="set"} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7629 | :tag("enable",{xmlns=o}) |
12 | 7630 | ,function(e) |
7631 | local e=e.attr.type=="result"; | |
7632 | if e then | |
7633 | t.enabled=true; | |
7634 | end | |
7635 | if i then | |
7636 | i(e); | |
7637 | end | |
7638 | end or nil); | |
7639 | end | |
7640 | function t:disable(i) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7641 | e:send_iq(a.iq{type="set"} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7642 | :tag("disable",{xmlns=o}) |
12 | 7643 | ,function(e) |
7644 | local e=e.attr.type=="result"; | |
7645 | if e then | |
7646 | t.enabled=false; | |
7647 | end | |
7648 | if i then | |
7649 | i(e); | |
7650 | end | |
7651 | end or nil); | |
7652 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7653 | local i; |
12 | 7654 | e:hook("bind-success",function() |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7655 | i=h(e.jid); |
12 | 7656 | end); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7657 | e:hook("message",function(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7658 | local t=a:get_child(nil,o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7659 | if a.attr.from==i and t then |
12 | 7660 | local o=t.name; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7661 | local t=t:get_child("forwarded",n); |
12 | 7662 | local a=t and t:get_child("message","jabber:client"); |
7663 | local t=t:get_child("delay","urn:xmpp:delay"); | |
7664 | local t=t and t.attr.stamp; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7665 | t=t and r(t); |
12 | 7666 | if a then |
7667 | return e:event("carbon",{ | |
7668 | dir=o, | |
7669 | stanza=a, | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7670 | timestamp=t or s(), |
12 | 7671 | }); |
7672 | end | |
7673 | end | |
7674 | end,1); | |
7675 | end | |
7676 | end) | |
7677 | package.preload['verse.plugins.archive']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7678 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7679 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7680 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7681 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7682 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7683 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7684 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7685 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7686 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7687 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7688 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7689 | local a=require"verse"; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7690 | local t=require"util.stanza"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7691 | local e="urn:xmpp:mam:2" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7692 | local n="urn:xmpp:forward:0"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7693 | local c="urn:xmpp:delay"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7694 | local d=require"util.uuid".generate; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7695 | local m=require"util.datetime".parse; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7696 | local s=require"util.datetime".datetime; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7697 | local o=require"util.dataforms".new; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7698 | local h=require"util.rsm"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7699 | local l={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7700 | local u=o{ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7701 | {name="FORM_TYPE";type="hidden";value=e;}; |
12 | 7702 | {name="with";type="jid-single";}; |
7703 | {name="start";type="text-single"}; | |
7704 | {name="end";type="text-single";}; | |
7705 | }; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7706 | function a.plugins.archive(i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7707 | function i:query_archive(o,a,r) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7708 | local d=d(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7709 | local o=t.iq{type="set",to=o} |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7710 | :tag("query",{xmlns=e,queryid=d}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7711 | local i,t=tonumber(a["start"]),tonumber(a["end"]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7712 | a["start"]=i and s(i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7713 | a["end"]=t and s(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7714 | o:add_child(u:form(a,"submit")); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7715 | o:add_child(h.generate(a)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7716 | local t={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7717 | local function i(o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7718 | local a=o:get_child("result",e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7719 | if a and a.attr.queryid==d then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7720 | local e=a:get_child("forwarded",n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7721 | e=e or o:get_child("forwarded",n); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7722 | local o=a.attr.id; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7723 | local a=e:get_child("delay",c); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7724 | local a=a and m(a.attr.stamp)or nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7725 | local e=e:get_child("message","jabber:client") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7726 | t[#t+1]={id=o,stamp=a,message=e}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7727 | return true |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7728 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7729 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7730 | self:hook("message",i,1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7731 | self:send_iq(o,function(a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7732 | self:unhook("message",i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7733 | if a.attr.type=="error"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7734 | self:warn(table.concat({a:get_error()}," ")) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7735 | r(false,a:get_error()) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7736 | return true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7737 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7738 | local e=a:get_child("fin",e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7739 | if e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7740 | local e=h.get(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7741 | for a,e in pairs(e or l)do t[a]=e;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7742 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7743 | r(t); |
12 | 7744 | return true |
7745 | end); | |
7746 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7747 | local n={ |
12 | 7748 | always=true,[true]="always", |
7749 | never=false,[false]="never", | |
7750 | roster="roster", | |
7751 | } | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7752 | local function s(t) |
12 | 7753 | local e={}; |
7754 | local a=t.attr.default; | |
7755 | if a then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7756 | e[false]=n[a]; |
12 | 7757 | end |
7758 | local a=t:get_child("always"); | |
7759 | if a then | |
7760 | for t in a:childtags("jid")do | |
7761 | local t=t:get_text(); | |
7762 | e[t]=true; | |
7763 | end | |
7764 | end | |
7765 | local t=t:get_child("never"); | |
7766 | if t then | |
7767 | for t in t:childtags("jid")do | |
7768 | local t=t:get_text(); | |
7769 | e[t]=false; | |
7770 | end | |
7771 | end | |
7772 | return e; | |
7773 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7774 | local function h(o) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7775 | local a |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7776 | a,o[false]=o[false],nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7777 | if a~=nil then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7778 | a=n[a]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7779 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7780 | local i=t.stanza("prefs",{xmlns=e,default=a}) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7781 | local a=t.stanza("always"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7782 | local e=t.stanza("never"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7783 | for o,t in pairs(o)do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7784 | (t and a or e):tag("jid"):text(o):up(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7785 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7786 | return i:add_child(a):add_child(e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7787 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7788 | function i:archive_prefs_get(a) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7789 | self:send_iq(t.iq{type="get"}:tag("prefs",{xmlns=e}), |
12 | 7790 | function(e) |
7791 | if e and e.attr.type=="result"and e.tags[1]then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7792 | local t=s(e.tags[1]); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7793 | a(t,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7794 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7795 | a(nil,e); |
12 | 7796 | end |
7797 | end); | |
7798 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7799 | function i:archive_prefs_set(e,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7800 | self:send_iq(t.iq{type="set"}:add_child(h(e)),a); |
12 | 7801 | end |
7802 | end | |
7803 | end) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7804 | package.preload['util.http']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7805 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7806 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7807 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7808 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7809 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7810 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7811 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7812 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7813 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7814 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7815 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7816 | local t,n=string.format,string.char; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7817 | local o,s,h=pairs,ipairs,tonumber; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7818 | local i,d=table.insert,table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7819 | local function r(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7820 | return e and(e:gsub("[^a-zA-Z0-9.~_-]",function(e)return t("%%%02x",e:byte());end)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7821 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7822 | local function a(e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7823 | return e and(e:gsub("%%(%x%x)",function(e)return n(h(e,16));end)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7824 | end |
12 | 7825 | local function e(e) |
7826 | return e and(e:gsub("%W",function(e) | |
7827 | if e~=" "then | |
7828 | return t("%%%02x",e:byte()); | |
7829 | else | |
7830 | return"+"; | |
7831 | end | |
7832 | end)); | |
7833 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7834 | local function n(t) |
12 | 7835 | local a={}; |
7836 | if t[1]then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7837 | for o,t in s(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7838 | i(a,e(t.name).."="..e(t.value)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7839 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7840 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7841 | for o,t in o(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7842 | i(a,e(o).."="..e(t)); |
12 | 7843 | end |
7844 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7845 | return d(a,"&"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7846 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7847 | local function s(e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7848 | if not e:match("=")then return a(e);end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7849 | local o={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7850 | for e,t in e:gmatch("([^=&]*)=([^&]*)")do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7851 | e,t=e:gsub("%+","%%20"),t:gsub("%+","%%20"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7852 | e,t=a(e),a(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7853 | i(o,{name=e,value=t}); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7854 | o[e]=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7855 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7856 | return o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7857 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7858 | local function o(e,t) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7859 | e=","..e:gsub("[ \t]",""):lower()..","; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7860 | return e:find(","..t:lower()..",",1,true)~=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7861 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7862 | return{ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7863 | urlencode=r,urldecode=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7864 | formencode=n,formdecode=s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7865 | contains_token=o; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7866 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7867 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7868 | package.preload['net.http.parser']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7869 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7870 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7871 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7872 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7873 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7874 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7875 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7876 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7877 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7878 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7879 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7880 | local m=tonumber; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7881 | local a=assert; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7882 | local v=require"socket.url".parse; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7883 | local t=require"util.http".urldecode; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7884 | local function b(e) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7885 | e=t((e:gsub("//+","/"))); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7886 | if e:sub(1,1)~="/"then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7887 | e="/"..e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7888 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7889 | local t=0; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7890 | for e in e:gmatch("([^/]+)/")do |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7891 | if e==".."then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7892 | t=t-1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7893 | elseif e~="."then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7894 | t=t+1; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7895 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7896 | if t<0 then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7897 | return nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7898 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7899 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7900 | return e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7901 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7902 | local y={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7903 | function y.new(c,h,e,y) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7904 | local d=true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7905 | if not e or e=="server"then d=false;else a(e=="client","Invalid parser type");end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7906 | local e=""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7907 | local p,o,r; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7908 | local s=nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7909 | local t; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7910 | local a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7911 | local u; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7912 | local n; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7913 | return{ |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7914 | feed=function(l,i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7915 | if n then return nil,"parse has failed";end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7916 | if not i then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7917 | if s and d and not a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7918 | t.body=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7919 | c(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7920 | elseif e~=""then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7921 | n=true;return h(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7922 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7923 | return; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7924 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7925 | e=e..i; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7926 | while#e>0 do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7927 | if s==nil then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7928 | local f=e:find("\r\n\r\n",nil,true); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7929 | if not f then return;end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7930 | local w,r,l,i,g; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7931 | local c; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7932 | local o={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7933 | for t in e:sub(1,f+1):gmatch("([^\r\n]+)\r\n")do |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7934 | if c then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7935 | local e,t=t:match("^([^%s:]+): *(.*)$"); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7936 | if not e then n=true;return h("invalid-header-line");end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7937 | e=e:lower(); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7938 | o[e]=o[e]and o[e]..","..t or t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7939 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7940 | c=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7941 | if d then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7942 | l,i,g=t:match("^HTTP/(1%.[01]) (%d%d%d) (.*)$"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7943 | i=m(i); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7944 | if not i then n=true;return h("invalid-status-line");end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7945 | u=not |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7946 | ((y and y().method=="HEAD") |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7947 | or(i==204 or i==304 or i==301) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7948 | or(i>=100 and i<200)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7949 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7950 | w,r,l=t:match("^(%w+) (%S+) HTTP/(1%.[01])$"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7951 | if not w then n=true;return h("invalid-status-line");end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7952 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7953 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7954 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7955 | if not c then n=true;return h("invalid-status-line");end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7956 | p=u and o["transfer-encoding"]=="chunked"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7957 | a=m(o["content-length"]); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7958 | if d then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7959 | if not u then a=0;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7960 | t={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7961 | code=i; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7962 | httpversion=l; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7963 | headers=o; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7964 | body=u and""or nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7965 | responseversion=l; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7966 | responseheaders=o; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7967 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7968 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7969 | local e; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7970 | if r:byte()==47 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7971 | local a,t=r:match("([^?]*).?(.*)"); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7972 | if t==""then t=nil;end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7973 | e={path=a,query=t}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7974 | else |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7975 | e=v(r); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7976 | if not(e and e.path)then n=true;return h("invalid-url");end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7977 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7978 | r=b(e.path); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7979 | o.host=e.host or o.host; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7980 | a=a or 0; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7981 | t={ |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7982 | method=w; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7983 | url=e; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7984 | path=r; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7985 | httpversion=l; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7986 | headers=o; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7987 | body=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7988 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7989 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7990 | e=e:sub(f+4); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7991 | s=true; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7992 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7993 | if s then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7994 | if d then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7995 | if p then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7996 | if not e:find("\r\n",nil,true)then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7997 | return; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
7998 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
7999 | if not o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8000 | o,r=e:match("^(%x+)[^\r\n]*\r\n()"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8001 | o=o and m(o,16); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8002 | if not o then n=true;return h("invalid-chunk-size");end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8003 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8004 | if o==0 and e:find("\r\n\r\n",r-2,true)then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8005 | s,o=nil,nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8006 | e=e:gsub("^.-\r\n\r\n",""); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8007 | c(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8008 | elseif#e-r-2>=o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8009 | t.body=t.body..e:sub(r,r+(o-1)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8010 | e=e:sub(r+o+2); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8011 | o,r=nil,nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8012 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8013 | break; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8014 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8015 | elseif a and#e>=a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8016 | if t.code==101 then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8017 | t.body,e=e,""; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8018 | else |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8019 | t.body,e=e:sub(1,a),e:sub(a+1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8020 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8021 | s=nil;c(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8022 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8023 | break; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8024 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8025 | elseif#e>=a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8026 | t.body,e=e:sub(1,a),e:sub(a+1); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8027 | s=nil;c(t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8028 | else |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8029 | break; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8030 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8031 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8032 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8033 | end; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8034 | }; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8035 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8036 | return y; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8037 | end) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8038 | package.preload['net.http']=(function(...) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8039 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8040 | local function a(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8041 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8042 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8043 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8044 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8045 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8046 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8047 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8048 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8049 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8050 | local g=require"socket" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8051 | local b=require"util.encodings".base64.encode; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8052 | local l=require"socket.url" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8053 | local u=require"net.http.parser".new; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8054 | local s=require"util.http"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8055 | local k=pcall(require,"ssl"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8056 | local q=require"net.server" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8057 | local d,o=table.insert,table.concat; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8058 | local m=pairs; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8059 | local y,h,w,f,r= |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8060 | tonumber,tostring,xpcall,select,debug.traceback; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8061 | local p,v=assert,error |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8062 | local c=require"util.logger".init("http"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8063 | a"http" |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8064 | local i={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8065 | local n={default_port=80,default_mode="*a"}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8066 | function n.onconnect(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8067 | local e=i[t]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8068 | local a={e.method or"GET"," ",e.path," HTTP/1.1\r\n"}; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8069 | if e.query then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8070 | d(a,4,"?"..e.query); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8071 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8072 | t:write(o(a)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8073 | local a={[2]=": ",[4]="\r\n"}; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8074 | for e,i in m(e.headers)do |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8075 | a[1],a[3]=e,i; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8076 | t:write(o(a)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8077 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8078 | t:write("\r\n"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8079 | if e.body then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8080 | t:write(e.body); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8081 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8082 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8083 | function n.onincoming(a,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8084 | local e=i[a]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8085 | if not e then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8086 | c("warn","Received response from connection %s with no request attached!",h(a)); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8087 | return; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8088 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8089 | if t and e.reader then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8090 | e:reader(t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8091 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8092 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8093 | function n.ondisconnect(t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8094 | local e=i[t]; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8095 | if e and e.conn then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8096 | e:reader(nil,a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8097 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8098 | i[t]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8099 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8100 | function n.ondetach(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8101 | i[e]=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8102 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8103 | local function x(e,a,i) |
12 | 8104 | if not e.parser then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8105 | local function o(t) |
12 | 8106 | if e.callback then |
8107 | e.callback(t or"connection-closed",0,e); | |
8108 | e.callback=nil; | |
8109 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8110 | destroy_request(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8111 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8112 | if not a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8113 | o(i); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8114 | return; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8115 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8116 | local function a(t) |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8117 | if e.callback then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8118 | e.callback(t.body,t.code,t,e); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8119 | e.callback=nil; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8120 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8121 | destroy_request(e); |
12 | 8122 | end |
8123 | local function t() | |
8124 | return e; | |
8125 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8126 | e.parser=u(a,o,"client",t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8127 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8128 | e.parser:feed(a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8129 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8130 | local function j(e)c("error","Traceback[http]: %s",r(h(e),2));end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8131 | function request(e,t,r) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8132 | local e=l.parse(e); |
12 | 8133 | if not(e and e.host)then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8134 | r(nil,0,e); |
12 | 8135 | return nil,"invalid-url"; |
8136 | end | |
8137 | if not e.path then | |
8138 | e.path="/"; | |
8139 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8140 | local l,o,s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8141 | local u,a=e.host,e.port; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8142 | local d=u; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8143 | if(a=="80"and e.scheme=="http") |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8144 | or(a=="443"and e.scheme=="https")then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8145 | a=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8146 | elseif a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8147 | d=d..":"..a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8148 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8149 | o={ |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8150 | ["Host"]=d; |
12 | 8151 | ["User-Agent"]="Prosody XMPP Server"; |
8152 | }; | |
8153 | if e.userinfo then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8154 | o["Authorization"]="Basic "..b(e.userinfo); |
12 | 8155 | end |
8156 | if t then | |
8157 | e.onlystatus=t.onlystatus; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8158 | s=t.body; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8159 | if s then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8160 | l="POST"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8161 | o["Content-Length"]=h(#s); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8162 | o["Content-Type"]="application/x-www-form-urlencoded"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8163 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8164 | if t.method then l=t.method;end |
12 | 8165 | if t.headers then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8166 | for e,t in m(t.headers)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8167 | o[e]=t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8168 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8169 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8170 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8171 | e.method,e.headers,e.body=l,o,s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8172 | local o=e.scheme=="https"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8173 | if o and not k then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8174 | v("SSL not available, unable to contact https URL"); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8175 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8176 | local h=a and y(a)or(o and 443 or 80); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8177 | local a=g.tcp(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8178 | a:settimeout(10); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8179 | local d,s=a:connect(u,h); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8180 | if not d and s~="timeout"then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8181 | r(nil,0,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8182 | return nil,s; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8183 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8184 | local s=false; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8185 | if o then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8186 | s=t and t.sslctx or{mode="client",protocol="sslv23",options={"no_sslv2","no_sslv3"}}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8187 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8188 | e.handler,e.conn=p(q.wrapclient(a,u,h,n,"*a",s)); |
12 | 8189 | e.write=function(...)return e.handler:write(...);end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8190 | e.callback=function(i,t,o,a)c("debug","Calling callback, status %s",t or"---");return f(2,w(function()return r(i,t,o,a)end,j));end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8191 | e.reader=x; |
12 | 8192 | e.state="status"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8193 | i[e.handler]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8194 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8195 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8196 | function destroy_request(e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8197 | if e.conn then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8198 | e.conn=nil; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8199 | e.handler:close() |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8200 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8201 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8202 | local e,t=s.urlencode,s.urldecode; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8203 | local o,a=s.formencode,s.formdecode; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8204 | _M.urlencode,_M.urldecode=e,t; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8205 | _M.formencode,_M.formdecode=o,a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8206 | return _M; |
12 | 8207 | end) |
8208 | package.preload['verse.bosh']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8209 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8210 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8211 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8212 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8213 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8214 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8215 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8216 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8217 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8218 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8219 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8220 | local h=require"util.xmppstream".new; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8221 | local i=require"util.stanza"; |
12 | 8222 | require"net.httpclient_listener"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8223 | local o=require"net.http"; |
12 | 8224 | local e=setmetatable({},{__index=verse.stream_mt}); |
8225 | e.__index=e; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8226 | local n="http://etherx.jabber.org/streams"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8227 | local s="http://jabber.org/protocol/httpbind"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8228 | local a=5; |
12 | 8229 | function verse.new_bosh(a,t) |
8230 | local t={ | |
8231 | bosh_conn_pool={}; | |
8232 | bosh_waiting_requests={}; | |
8233 | bosh_rid=math.random(1,999999); | |
8234 | bosh_outgoing_buffer={}; | |
8235 | bosh_url=t; | |
8236 | conn={}; | |
8237 | }; | |
8238 | function t:reopen() | |
8239 | self.bosh_need_restart=true; | |
8240 | self:flush(); | |
8241 | end | |
8242 | local t=verse.new(a,t); | |
8243 | return setmetatable(t,e); | |
8244 | end | |
8245 | function e:connect() | |
8246 | self:_send_session_request(); | |
8247 | end | |
8248 | function e:send(e) | |
8249 | self:debug("Putting into BOSH send buffer: %s",tostring(e)); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8250 | self.bosh_outgoing_buffer[#self.bosh_outgoing_buffer+1]=i.clone(e); |
12 | 8251 | self:flush(); |
8252 | end | |
8253 | function e:flush() | |
8254 | if self.connected | |
8255 | and#self.bosh_waiting_requests<self.bosh_max_requests | |
8256 | and(#self.bosh_waiting_requests==0 | |
8257 | or#self.bosh_outgoing_buffer>0 | |
8258 | or self.bosh_need_restart)then | |
8259 | self:debug("Flushing..."); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8260 | local e=self:_make_body(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8261 | local t=self.bosh_outgoing_buffer; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8262 | for a,o in ipairs(t)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8263 | e:add_child(o); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8264 | t[a]=nil; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8265 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8266 | self:_make_request(e); |
12 | 8267 | else |
8268 | self:debug("Decided not to flush."); | |
8269 | end | |
8270 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8271 | function e:_make_request(i) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8272 | local e,t=o.request(self.bosh_url,{body=tostring(i)},function(o,e,t) |
12 | 8273 | if e~=0 then |
8274 | self.inactive_since=nil; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8275 | return self:_handle_response(o,e,t); |
12 | 8276 | end |
8277 | local e=os.time(); | |
8278 | if not self.inactive_since then | |
8279 | self.inactive_since=e; | |
8280 | elseif e-self.inactive_since>self.bosh_max_inactivity then | |
8281 | return self:_disconnected(); | |
8282 | else | |
8283 | self:debug("%d seconds left to reconnect, retrying in %d seconds...", | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8284 | self.bosh_max_inactivity-(e-self.inactive_since),a); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8285 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8286 | timer.add_task(a,function() |
12 | 8287 | self:debug("Retrying request..."); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8288 | for e,a in ipairs(self.bosh_waiting_requests)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8289 | if a==t then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8290 | table.remove(self.bosh_waiting_requests,e); |
12 | 8291 | break; |
8292 | end | |
8293 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8294 | self:_make_request(i); |
12 | 8295 | end); |
8296 | end); | |
8297 | if e then | |
8298 | table.insert(self.bosh_waiting_requests,e); | |
8299 | else | |
8300 | self:warn("Request failed instantly: %s",t); | |
8301 | end | |
8302 | end | |
8303 | function e:_disconnected() | |
8304 | self.connected=nil; | |
8305 | self:event("disconnected"); | |
8306 | end | |
8307 | function e:_send_session_request() | |
8308 | local e=self:_make_body(); | |
8309 | e.attr.hold="1"; | |
8310 | e.attr.wait="60"; | |
8311 | e.attr["xml:lang"]="en"; | |
8312 | e.attr.ver="1.6"; | |
8313 | e.attr.from=self.jid; | |
8314 | e.attr.to=self.host; | |
8315 | e.attr.secure='true'; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8316 | o.request(self.bosh_url,{body=tostring(e)},function(e,t) |
12 | 8317 | if t==0 then |
8318 | return self:_disconnected(); | |
8319 | end | |
8320 | local e=self:_parse_response(e) | |
8321 | if not e then | |
8322 | self:warn("Invalid session creation response"); | |
8323 | self:_disconnected(); | |
8324 | return; | |
8325 | end | |
8326 | self.bosh_sid=e.attr.sid; | |
8327 | self.bosh_wait=tonumber(e.attr.wait); | |
8328 | self.bosh_hold=tonumber(e.attr.hold); | |
8329 | self.bosh_max_inactivity=tonumber(e.attr.inactivity); | |
8330 | self.bosh_max_requests=tonumber(e.attr.requests)or self.bosh_hold; | |
8331 | self.connected=true; | |
8332 | self:event("connected"); | |
8333 | self:_handle_response_payload(e); | |
8334 | end); | |
8335 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8336 | function e:_handle_response(o,t,e) |
12 | 8337 | if self.bosh_waiting_requests[1]~=e then |
8338 | self:warn("Server replied to request that wasn't the oldest"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8339 | for a,t in ipairs(self.bosh_waiting_requests)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8340 | if t==e then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8341 | self.bosh_waiting_requests[a]=nil; |
12 | 8342 | break; |
8343 | end | |
8344 | end | |
8345 | else | |
8346 | table.remove(self.bosh_waiting_requests,1); | |
8347 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8348 | local e=self:_parse_response(o); |
12 | 8349 | if e then |
8350 | self:_handle_response_payload(e); | |
8351 | end | |
8352 | self:flush(); | |
8353 | end | |
8354 | function e:_handle_response_payload(t) | |
8355 | local e=t.tags; | |
8356 | for t=1,#e do | |
8357 | local e=e[t]; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8358 | if e.attr.xmlns==n then |
12 | 8359 | self:event("stream-"..e.name,e); |
8360 | elseif e.attr.xmlns then | |
8361 | self:event("stream/"..e.attr.xmlns,e); | |
8362 | else | |
8363 | self:event("stanza",e); | |
8364 | end | |
8365 | end | |
8366 | if t.attr.type=="terminate"then | |
8367 | self:_disconnected({reason=t.attr.condition}); | |
8368 | end | |
8369 | end | |
8370 | local a={ | |
8371 | stream_ns="http://jabber.org/protocol/httpbind",stream_tag="body", | |
8372 | default_ns="jabber:client", | |
8373 | streamopened=function(e,t)e.notopen=nil;e.payload=verse.stanza("body",t);return true;end; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8374 | handlestanza=function(e,t)e.payload:add_child(t);end; |
12 | 8375 | }; |
8376 | function e:_parse_response(e) | |
8377 | self:debug("Parsing response: %s",e); | |
8378 | if e==nil then | |
8379 | self:debug("%s",debug.traceback()); | |
8380 | self:_disconnected(); | |
8381 | return; | |
8382 | end | |
8383 | local t={notopen=true,stream=self}; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8384 | local a=h(t,a); |
12 | 8385 | a:feed(e); |
8386 | return t.payload; | |
8387 | end | |
8388 | function e:_make_body() | |
8389 | self.bosh_rid=self.bosh_rid+1; | |
8390 | local e=verse.stanza("body",{ | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8391 | xmlns=s; |
12 | 8392 | content="text/xml; charset=utf-8"; |
8393 | sid=self.bosh_sid; | |
8394 | rid=self.bosh_rid; | |
8395 | }); | |
8396 | if self.bosh_need_restart then | |
8397 | self.bosh_need_restart=nil; | |
8398 | e.attr.restart='true'; | |
8399 | end | |
8400 | return e; | |
8401 | end | |
8402 | end) | |
8403 | package.preload['verse.client']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8404 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8405 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8406 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8407 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8408 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8409 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8410 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8411 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8412 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8413 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8414 | end |
12 | 8415 | local t=require"verse"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8416 | local o=t.stream_mt; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8417 | local d=require"util.jid".split; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8418 | local h=require"net.adns"; |
12 | 8419 | local e=require"lxp"; |
8420 | local a=require"util.stanza"; | |
8421 | t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply= | |
8422 | a.message,a.presence,a.iq,a.stanza,a.reply,a.error_reply; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8423 | local r=require"util.xmppstream".new; |
12 | 8424 | local n="http://etherx.jabber.org/streams"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8425 | local function s(t,e) |
12 | 8426 | return t.priority<e.priority or(t.priority==e.priority and t.weight>e.weight); |
8427 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8428 | local i={ |
12 | 8429 | stream_ns=n, |
8430 | stream_tag="stream", | |
8431 | default_ns="jabber:client"}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8432 | function i.streamopened(e,t) |
12 | 8433 | e.stream_id=t.id; |
8434 | if not e:event("opened",t)then | |
8435 | e.notopen=nil; | |
8436 | end | |
8437 | return true; | |
8438 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8439 | function i.streamclosed(e) |
12 | 8440 | e.notopen=true; |
8441 | if not e.closed then | |
8442 | e:send("</stream:stream>"); | |
8443 | e.closed=true; | |
8444 | end | |
8445 | e:event("closed"); | |
8446 | return e:close("stream closed") | |
8447 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8448 | function i.handlestanza(t,e) |
12 | 8449 | if e.attr.xmlns==n then |
8450 | return t:event("stream-"..e.name,e); | |
8451 | elseif e.attr.xmlns then | |
8452 | return t:event("stream/"..e.attr.xmlns,e); | |
8453 | end | |
8454 | return t:event("stanza",e); | |
8455 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8456 | function i.error(a,t,e) |
12 | 8457 | if a:event(t,e)==nil then |
8458 | if e then | |
8459 | local t=e:get_child(nil,"urn:ietf:params:xml:ns:xmpp-streams"); | |
8460 | local e=e:get_child_text("text","urn:ietf:params:xml:ns:xmpp-streams"); | |
8461 | error(t.name..(e and": "..e or"")); | |
8462 | else | |
8463 | error(e and e.name or t or"unknown-error"); | |
8464 | end | |
8465 | end | |
8466 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8467 | function o:reset() |
12 | 8468 | if self.stream then |
8469 | self.stream:reset(); | |
8470 | else | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8471 | self.stream=r(self,i); |
12 | 8472 | end |
8473 | self.notopen=true; | |
8474 | return true; | |
8475 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8476 | function o:connect_client(e,a) |
12 | 8477 | self.jid,self.password=e,a; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8478 | self.username,self.host,self.resource=d(e); |
12 | 8479 | self:add_plugin("tls"); |
8480 | self:add_plugin("sasl"); | |
8481 | self:add_plugin("bind"); | |
8482 | self:add_plugin("session"); | |
8483 | function self.data(t,e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8484 | local t,a=self.stream:feed(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8485 | if t then return;end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8486 | self:debug("Received invalid XML (%s) %d bytes: %s",tostring(a),#e,e:sub(1,300):gsub("[\r\n]+"," ")); |
12 | 8487 | self:close("xml-not-well-formed"); |
8488 | end | |
8489 | self:hook("connected",function()self:reopen();end); | |
8490 | self:hook("incoming-raw",function(e)return self.data(self.conn,e);end); | |
8491 | self.curr_id=0; | |
8492 | self.tracked_iqs={}; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8493 | self:hook("stanza",function(t) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8494 | local e,a=t.attr.id,t.attr.type; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8495 | if e and t.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[e]then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8496 | self.tracked_iqs[e](t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8497 | self.tracked_iqs[e]=nil; |
12 | 8498 | return true; |
8499 | end | |
8500 | end); | |
8501 | self:hook("stanza",function(e) | |
8502 | local a; | |
8503 | if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then | |
8504 | if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then | |
8505 | local o=e.tags[1]and e.tags[1].attr.xmlns; | |
8506 | if o then | |
8507 | a=self:event("iq/"..o,e); | |
8508 | if not a then | |
8509 | a=self:event("iq",e); | |
8510 | end | |
8511 | end | |
8512 | if a==nil then | |
8513 | self:send(t.error_reply(e,"cancel","service-unavailable")); | |
8514 | return true; | |
8515 | end | |
8516 | else | |
8517 | a=self:event(e.name,e); | |
8518 | end | |
8519 | end | |
8520 | return a; | |
8521 | end,-1); | |
8522 | self:hook("outgoing",function(e) | |
8523 | if e.name then | |
8524 | self:event("stanza-out",e); | |
8525 | end | |
8526 | end); | |
8527 | self:hook("stanza-out",function(e) | |
8528 | if not e.attr.xmlns then | |
8529 | self:event(e.name.."-out",e); | |
8530 | end | |
8531 | end); | |
8532 | local function e() | |
8533 | self:event("ready"); | |
8534 | end | |
8535 | self:hook("session-success",e,-1) | |
8536 | self:hook("bind-success",e,-1); | |
8537 | local t=self.close; | |
8538 | function self:close(e) | |
8539 | self.close=t; | |
8540 | if not self.closed then | |
8541 | self:send("</stream:stream>"); | |
8542 | self.closed=true; | |
8543 | else | |
8544 | return self:close(e); | |
8545 | end | |
8546 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8547 | local function a() |
12 | 8548 | self:connect(self.connect_host or self.host,self.connect_port or 5222); |
8549 | end | |
8550 | if not(self.connect_host or self.connect_port)then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8551 | h.lookup(function(t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8552 | if t then |
12 | 8553 | local e={}; |
8554 | self.srv_hosts=e; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8555 | for a,t in ipairs(t)do |
12 | 8556 | table.insert(e,t.srv); |
8557 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8558 | table.sort(e,s); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8559 | local t=e[1]; |
12 | 8560 | self.srv_choice=1; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8561 | if t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8562 | self.connect_host,self.connect_port=t.target,t.port; |
12 | 8563 | self:debug("Best record found, will connect to %s:%d",self.connect_host or self.host,self.connect_port or 5222); |
8564 | end | |
8565 | self:hook("disconnected",function() | |
8566 | if self.srv_hosts and self.srv_choice<#self.srv_hosts then | |
8567 | self.srv_choice=self.srv_choice+1; | |
8568 | local e=e[self.srv_choice]; | |
8569 | self.connect_host,self.connect_port=e.target,e.port; | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8570 | a(); |
12 | 8571 | return true; |
8572 | end | |
8573 | end,1e3); | |
8574 | self:hook("connected",function() | |
8575 | self.srv_hosts=nil; | |
8576 | end,1e3); | |
8577 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8578 | a(); |
12 | 8579 | end,"_xmpp-client._tcp."..(self.host)..".","SRV"); |
8580 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8581 | a(); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8582 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8583 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8584 | function o:reopen() |
12 | 8585 | self:reset(); |
8586 | self:send(a.stanza("stream:stream",{to=self.host,["xmlns:stream"]='http://etherx.jabber.org/streams', | |
8587 | xmlns="jabber:client",version="1.0"}):top_tag()); | |
8588 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8589 | function o:send_iq(t,a) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8590 | local e=self:new_id(); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8591 | self.tracked_iqs[e]=a; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8592 | t.attr.id=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8593 | self:send(t); |
12 | 8594 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8595 | function o:new_id() |
12 | 8596 | self.curr_id=self.curr_id+1; |
8597 | return tostring(self.curr_id); | |
8598 | end | |
8599 | end) | |
8600 | package.preload['verse.component']=(function(...) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8601 | local _ENV=_ENV; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8602 | local function e(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8603 | local e=package.loaded[t]or _ENV[t]or{_NAME=t}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8604 | package.loaded[t]=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8605 | for t=1,select("#",...)do |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8606 | (select(t,...))(e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8607 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8608 | _ENV=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8609 | _M=e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8610 | return e; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8611 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8612 | local t=require"verse"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8613 | local a=t.stream_mt; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8614 | local h=require"util.jid".split; |
12 | 8615 | local e=require"lxp"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8616 | local o=require"util.stanza"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8617 | local d=require"util.hashes".sha1; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8618 | t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply= |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8619 | o.message,o.presence,o.iq,o.stanza,o.reply,o.error_reply; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8620 | local r=require"util.xmppstream".new; |
12 | 8621 | local s="http://etherx.jabber.org/streams"; |
8622 | local i="jabber:component:accept"; | |
8623 | local n={ | |
8624 | stream_ns=s, | |
8625 | stream_tag="stream", | |
8626 | default_ns=i}; | |
8627 | function n.streamopened(e,t) | |
8628 | e.stream_id=t.id; | |
8629 | if not e:event("opened",t)then | |
8630 | e.notopen=nil; | |
8631 | end | |
8632 | return true; | |
8633 | end | |
8634 | function n.streamclosed(e) | |
8635 | return e:event("closed"); | |
8636 | end | |
8637 | function n.handlestanza(t,e) | |
8638 | if e.attr.xmlns==s then | |
8639 | return t:event("stream-"..e.name,e); | |
8640 | elseif e.attr.xmlns or e.name=="handshake"then | |
8641 | return t:event("stream/"..(e.attr.xmlns or i),e); | |
8642 | end | |
8643 | return t:event("stanza",e); | |
8644 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8645 | function a:reset() |
12 | 8646 | if self.stream then |
8647 | self.stream:reset(); | |
8648 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8649 | self.stream=r(self,n); |
12 | 8650 | end |
8651 | self.notopen=true; | |
8652 | return true; | |
8653 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8654 | function a:connect_component(e,n) |
12 | 8655 | self.jid,self.password=e,n; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8656 | self.username,self.host,self.resource=h(e); |
12 | 8657 | function self.data(t,e) |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8658 | local t,o=self.stream:feed(e); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8659 | if t then return;end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8660 | a:debug("Received invalid XML (%s) %d bytes: %s",tostring(o),#e,e:sub(1,300):gsub("[\r\n]+"," ")); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8661 | a:close("xml-not-well-formed"); |
12 | 8662 | end |
8663 | self:hook("incoming-raw",function(e)return self.data(self.conn,e);end); | |
8664 | self.curr_id=0; | |
8665 | self.tracked_iqs={}; | |
8666 | self:hook("stanza",function(e) | |
8667 | local t,a=e.attr.id,e.attr.type; | |
8668 | if t and e.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[t]then | |
8669 | self.tracked_iqs[t](e); | |
8670 | self.tracked_iqs[t]=nil; | |
8671 | return true; | |
8672 | end | |
8673 | end); | |
8674 | self:hook("stanza",function(e) | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8675 | local a; |
12 | 8676 | if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then |
8677 | if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then | |
8678 | local o=e.tags[1]and e.tags[1].attr.xmlns; | |
8679 | if o then | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8680 | a=self:event("iq/"..o,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8681 | if not a then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8682 | a=self:event("iq",e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8683 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8684 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8685 | if a==nil then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8686 | self:send(t.error_reply(e,"cancel","service-unavailable")); |
12 | 8687 | return true; |
8688 | end | |
8689 | else | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8690 | a=self:event(e.name,e); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8691 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8692 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8693 | return a; |
12 | 8694 | end,-1); |
8695 | self:hook("opened",function(e) | |
8696 | print(self.jid,self.stream_id,e.id); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8697 | local e=d(self.stream_id..n,true); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8698 | self:send(o.stanza("handshake",{xmlns=i}):text(e)); |
12 | 8699 | self:hook("stream/"..i,function(e) |
8700 | if e.name=="handshake"then | |
8701 | self:event("authentication-success"); | |
8702 | end | |
8703 | end); | |
8704 | end); | |
8705 | local function e() | |
8706 | self:event("ready"); | |
8707 | end | |
8708 | self:hook("authentication-success",e,-1); | |
8709 | self:connect(self.connect_host or self.host,self.connect_port or 5347); | |
8710 | self:reopen(); | |
8711 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8712 | function a:reopen() |
12 | 8713 | self:reset(); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8714 | self:send(o.stanza("stream:stream",{to=self.jid,["xmlns:stream"]='http://etherx.jabber.org/streams', |
12 | 8715 | xmlns=i,version="1.0"}):top_tag()); |
8716 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8717 | function a:close(t) |
12 | 8718 | if not self.notopen then |
8719 | self:send("</stream:stream>"); | |
8720 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8721 | local e=self.conn.disconnect(); |
12 | 8722 | self.conn:close(); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8723 | e(conn,t); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8724 | end |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8725 | function a:send_iq(t,a) |
12 | 8726 | local e=self:new_id(); |
8727 | self.tracked_iqs[e]=a; | |
8728 | t.attr.id=e; | |
8729 | self:send(t); | |
8730 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8731 | function a:new_id() |
12 | 8732 | self.curr_id=self.curr_id+1; |
8733 | return tostring(self.curr_id); | |
8734 | end | |
8735 | end) | |
8736 | pcall(require,"luarocks.require"); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8737 | local h=require"socket"; |
12 | 8738 | pcall(require,"ssl"); |
8739 | local a=require"net.server"; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8740 | local s=require"util.events"; |
12 | 8741 | local o=require"util.logger"; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8742 | local e={}; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8743 | e.server=a; |
12 | 8744 | local t={}; |
8745 | t.__index=t; | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8746 | e.stream_mt=t; |
12 | 8747 | e.plugins={}; |
8748 | function e.init(...) | |
8749 | for e=1,select("#",...)do | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8750 | local t,a=pcall(require,"verse."..select(e,...)); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8751 | if not t then |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8752 | error("Verse connection module not found: verse."..select(e,...)..a); |
12 | 8753 | end |
8754 | end | |
8755 | return e; | |
8756 | end | |
8757 | local i=0; | |
8758 | function e.new(o,a) | |
8759 | local t=setmetatable(a or{},t); | |
8760 | i=i+1; | |
8761 | t.id=tostring(i); | |
8762 | t.logger=o or e.new_logger("stream"..t.id); | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8763 | t.events=s.new(); |
12 | 8764 | t.plugins={}; |
8765 | t.verse=e; | |
8766 | return t; | |
8767 | end | |
8768 | e.add_task=require"util.timer".add_task; | |
8769 | e.logger=o.init; | |
8770 | e.new_logger=o.init; | |
8771 | e.log=e.logger("verse"); | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8772 | local function n(t,...) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8773 | local e,a,o=0,{...},select('#',...); |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8774 | return(t:gsub("%%(.)",function(t)if e<=o then e=e+1;return tostring(a[e]);end end)); |
12 | 8775 | end |
8776 | function e.set_log_handler(e,t) | |
8777 | t=t or{"debug","info","warn","error"}; | |
8778 | o.reset(); | |
8779 | if io.type(e)=="file"then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8780 | local o=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8781 | function e(t,a,e) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8782 | o:write(t,"\t",a,"\t",e,"\n"); |
12 | 8783 | end |
8784 | end | |
8785 | if e then | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8786 | local function i(o,a,t,...) |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8787 | return e(o,a,n(t,...)); |
12 | 8788 | end |
8789 | for t,e in ipairs(t)do | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8790 | o.add_level_sink(e,i); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8791 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8792 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8793 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8794 | function e._default_log_handler(a,t,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8795 | return io.stderr:write(a,"\t",t,"\t",o,"\n"); |
12 | 8796 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8797 | e.set_log_handler(e._default_log_handler,{"error"}); |
12 | 8798 | local function o(t) |
8799 | e.log("error","Error: %s",t); | |
8800 | e.log("error","Traceback: %s",debug.traceback()); | |
8801 | end | |
8802 | function e.set_error_handler(e) | |
8803 | o=e; | |
8804 | end | |
8805 | function e.loop() | |
8806 | return xpcall(a.loop,o); | |
8807 | end | |
8808 | function e.step() | |
8809 | return xpcall(a.step,o); | |
8810 | end | |
8811 | function e.quit() | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8812 | return a.setquitting("once"); |
12 | 8813 | end |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8814 | function t:listen(t,o) |
12 | 8815 | t=t or"localhost"; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8816 | o=o or 0; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8817 | local e,a=a.addserver(t,o,e.new_listener(self,"server"),"*a"); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8818 | if e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8819 | self:debug("Bound to %s:%s",t,o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8820 | self.server=e; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8821 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8822 | return e,a; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8823 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8824 | function t:connect(i,o) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8825 | i=i or"localhost"; |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8826 | o=tonumber(o)or 5222; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8827 | local n=h.tcp() |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8828 | n:settimeout(0); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8829 | n:setoption("keepalive",true); |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8830 | local s,t=n:connect(i,o); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8831 | if not s and t~="timeout"then |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8832 | self:warn("connect() to %s:%d failed: %s",i,o,t); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8833 | return self:event("disconnected",{reason=t})or false,t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8834 | end |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8835 | local e=a.wrapclient(n,i,o,e.new_listener(self),"*a"); |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8836 | if not e then |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8837 | self:warn("connection initialisation failed: %s",t); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8838 | return self:event("disconnected",{reason=t})or false,t; |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8839 | end |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8840 | self:set_conn(e); |
12 | 8841 | return true; |
8842 | end | |
8843 | function t:set_conn(t) | |
8844 | self.conn=t; | |
8845 | self.send=function(a,e) | |
8846 | self:event("outgoing",e); | |
8847 | e=tostring(e); | |
8848 | self:event("outgoing-raw",e); | |
8849 | return t:write(e); | |
8850 | end; | |
8851 | end | |
8852 | function t:close(t) | |
8853 | if not self.conn then | |
8854 | e.log("error","Attempt to close disconnected connection - possibly a bug"); | |
8855 | return; | |
8856 | end | |
8857 | local e=self.conn.disconnect(); | |
8858 | self.conn:close(); | |
8859 | e(self.conn,t); | |
8860 | end | |
8861 | function t:debug(...) | |
8862 | return self.logger("debug",...); | |
8863 | end | |
8864 | function t:info(...) | |
8865 | return self.logger("info",...); | |
8866 | end | |
8867 | function t:warn(...) | |
8868 | return self.logger("warn",...); | |
8869 | end | |
8870 | function t:error(...) | |
8871 | return self.logger("error",...); | |
8872 | end | |
8873 | function t:event(e,...) | |
8874 | self:debug("Firing event: "..tostring(e)); | |
8875 | return self.events.fire_event(e,...); | |
8876 | end | |
8877 | function t:hook(e,...) | |
8878 | return self.events.add_handler(e,...); | |
8879 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8880 | function t:unhook(e,t) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8881 | return self.events.remove_handler(e,t); |
12 | 8882 | end |
8883 | function e.eventable(e) | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8884 | e.events=s.new(); |
12 | 8885 | e.hook,e.unhook=t.hook,t.unhook; |
8886 | local t=e.events.fire_event; | |
8887 | function e:event(e,...) | |
8888 | return t(e,...); | |
8889 | end | |
8890 | return e; | |
8891 | end | |
8892 | function t:add_plugin(t) | |
8893 | if self.plugins[t]then return true;end | |
8894 | if require("verse.plugins."..t)then | |
8895 | local a,e=e.plugins[t](self); | |
8896 | if a~=false then | |
8897 | self:debug("Loaded %s plugin",t); | |
8898 | self.plugins[t]=true; | |
8899 | else | |
8900 | self:warn("Failed to load %s plugin: %s",t,e); | |
8901 | end | |
8902 | end | |
8903 | return self; | |
8904 | end | |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8905 | function e.new_listener(t) |
12 | 8906 | local a={}; |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8907 | function a.onconnect(o) |
12 | 8908 | if t.server then |
88
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8909 | local a=e.new(); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8910 | o:setlistener(e.new_listener(a)); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8911 | a:set_conn(o); |
98b4cf14960b
verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
12
diff
changeset
|
8912 | t:event("connected",{client=a}); |
12 | 8913 | else |
8914 | t.connected=true; | |
8915 | t:event("connected"); | |
8916 | end | |
8917 | end | |
8918 | function a.onincoming(a,e) | |
8919 | t:event("incoming-raw",e); | |
8920 | end | |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8921 | function a.ondisconnect(a,e) |
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8922 | if a~=t.conn then return end |
12 | 8923 | t.connected=false; |
103
9e0e56393978
verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents:
88
diff
changeset
|
8924 | t:event("disconnected",{reason=e}); |
12 | 8925 | end |
8926 | function a.ondrain(e) | |
8927 | t:event("drained"); | |
8928 | end | |
8929 | function a.onstatus(a,e) | |
8930 | t:event("status",e); | |
8931 | end | |
8932 | return a; | |
8933 | end | |
8934 | return e; |