Thu, 23 Mar 2023 15:12:30 +0000
Serialize XML in a consistent order by default
This overrides all XML serialization to emit attributes in an ordered form, so
the XML will match across multiple runs. This can be useful for comparing
different runs, or even two stanzas printed in the same run (e.g. if there is
a mismatch).
12 | 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; |